Friday, June 6, 2008

SQL PL/SQL Interview Questions 5

21: What is GROUP BY?
A: The GROUP BY keywords have been added to SQL because aggregate functions (like SUM) return the aggregate of all column values every time they are called. Without the GROUP BY functionality, finding the sum for each individual group of column values was not possible.



22: What is the difference among "dropping a table", "truncating a table" and "deleting all records" from a table.
A: Dropping : (Table structure + Data are deleted), Invalidates the dependent objects ,Drops the indexes
Truncating: (Data alone deleted), Performs an automatic commit, Faster than delete
Delete : (Data alone deleted), Doesn�t perform automatic commit

23: What are the Large object types suported by Oracle?
A: Blob and Clob.

24: Difference between a "where" clause and a "having" clause.
A: Having clause is used only with group functions whereas Where is not used with.

25: What's the difference between a primary key and a unique key?
A: Both primary key and unique enforce uniqueness of the column on which they are defined. But by default primary key creates a clustered index on the column, where are unique creates a nonclustered index by default. Another major difference is that, primary key doesn't allow NULLs, but unique key allows one NULL only.

26: What are cursors? Explain different types of cursors. What are the disadvantages of cursors? How can you avoid cursors?
A: Cursors allow row-by-row prcessing of the resultsets.
Types of cursors: Static, Dynamic, Forward-only, Keyset-driven. See books online for more information.
Disadvantages of cursors: Each time you fetch a row from the cursor, it results in a network roundtrip, where as a normal SELECT query makes only one rowundtrip, however large the resultset is. Cursors are also costly because they require more resources and temporary storage (results in more IO operations). Furthere, there are restrictions on the SELECT statements that can be used with some types of cursors.
Most of the times, set based operations can be used instead of cursors.

2

1 comment:

Unknown said...

Hello,


#Topic being contrived to exist for many projects simply so it can be run will be the first to hit the wall, but those projects where the functions to make existing transactions cheaper in real world applications will find the elusive real world demand.

I am trying to use this in a materialized view and got below error:


SQL Error: ORA-12015: cannot create a fast refresh materialized view from a complex query

12015. 00000 - "cannot create a fast refresh materialized view from a complex query"

*Cause: Neither ROWIDs and nor primary key constraints are supported for

complex queries.

*Action: Reissue the command with the REFRESH FORCE or REFRESH COMPLETE

option or create a simple materialized view.


select IR.rowid MV_INST_LOBR_ROWID, J.rowid Job_ROWID, J.* FROM JOB J

LEFT JOIN MV_INST_LOB_R IR ON

(IR.I1503_CUST_AC_NO_PT1 = J.I3200_CUST_AC_NO_PT1 AND IR.I1503_CUST_AC_NO_PT2 = J.I3200_CUST_AC_NO_PT2 AND IR.I1503_INST_SEQ_NO = J.I3200_INST_SEQ_NO)

WHERE IR.I1503_CUST_AC_NO_PT1 IS NOT NULL AND IR.I1503_CUST_AC_NO_PT2 IS NOT NULL

UNION SELECT null, J.rowid Job_ROWID, J.* FROM JOB J WHERE J.I3200_CUST_AC_NO_PT1 IS NULL AND J.I3200_CUST_AC_NO_PT1 IS NULL;

Basically, the intention is to get all the records joining MV_INST_LOB_R and JOB table
where MV_INST_LOB_R do not have record for the joining condition J.I3200_CUST_AC_NO_PT1 / J.I3200_CUST_AC_NO_PT2


Can you help me in converting to simple query, so that I can use simple materialized view.

Follow my new blog if you interested in just tag along me in any social media platforms!


,Merci

Useful Information