PLSQL InterviewQuestions
PLSQL InterviewQuestions
Ans: Differences:
TRUNCATE commits after deleting entire table i.e., cannot be rolled back.
Database triggers do not fire on TRUNCATE DELETE allows the filtered deletion.
1) First difference between View and materialized view is that, in Views query result is not stored in the
disk or database but Materialized view stores query result in the disk.
2) In case of view its only the logical view of table, no separate copy of table but in case of Materialized
view we get physically separate copy of table
3) Another difference between View and materialized view is that, when we create view using any
table, rowid of view is same as original table but in case of Materialized view rowid is different.
4) One more difference between View and materialized view in database is that, in case of View we
always get latest data but in case of Materialized view we need to refresh the view for getting latest data.
6) Last difference between View and Materialized View is that, in case of Materialized view we need extra
trigger or some automatic method so that we can keep MV refreshed. This is not required for views in
database.
Function Procedure
5. What is cursor?----------------------imp
Oracle creates a memory area, known as the context area, for processing an SQL statement,
which contains all the information needed for processing the statement; for example, the
number of rows processed, etc.
A cursor is a pointer to this context area. PL/SQL controls the context area through a cursor. A
cursor holds the rows (one or more) returned by a SQL statement. The set of rows the cursor
holds is referred to as the active set.
You can name a cursor so that it could be referred to in a program to fetch and process the
rows returned by the SQL statement, one at a time. There are two types of cursors −
Implicit cursors
Explicit cursors
Implicit Cursors
Implicit cursors are automatically created by Oracle whenever an SQL statement is executed,
when there is no explicit cursor for the statement. Programmers cannot control the implicit
cursors and the information in it.
Whenever a DML statement (INSERT, UPDATE and DELETE) is issued, an implicit cursor is
associated with this statement. For INSERT operations, the cursor holds the data that needs to
be inserted. For UPDATE and DELETE operations, the cursor identifies the rows that would be
affected.
In PL/SQL, you can refer to the most recent implicit cursor as the SQL cursor, which always has
attributes such as %FOUND, %ISOPEN, %NOTFOUND, and %ROWCOUNT. The following table
provides the description of the most used attributes −
%FOUND
1
Returns TRUE if an INSERT, UPDATE, or DELETE statement affected one or more rows or a
SELECT INTO statement returned one or more rows. Otherwise, it returns FALSE.
%NOTFOUND
2
The logical opposite of %FOUND. It returns TRUE if an INSERT, UPDATE, or DELETE statement
affected no rows, or a SELECT INTO statement returned no rows. Otherwise, it returns FALSE.
%ISOPEN
3
Always returns FALSE for implicit cursors, because Oracle closes the SQL cursor automatically
after executing its associated SQL statement.
%ROWCOUNT
4
Returns the number of rows affected by an INSERT, UPDATE, or DELETE statement, or
returned by a SELECT INTO statement.
Any SQL cursor attribute will be accessed as sql%attribute_name as shown below in the
example.
Example
We will be using the CUSTOMERS table we had created and used in the previous chapters.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
The following program will update the table and increase the salary of each customer by 500
and use the SQL%ROWCOUNT attribute to determine the number of rows affected −
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
SET salary = salary + 500;
IF sql%notfound THEN
dbms_output.put_line('no customers selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' customers selected ');
END IF;
END;
/
When the above code is executed at the SQL prompt, it produces the following result −
6 customers selected
If you check the records in customers table, you will find that the rows have been updated −
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2500.00 |
| 2 | Khilan | 25 | Delhi | 2000.00 |
| 3 | kaushik | 23 | Kota | 2500.00 |
| 4 | Chaitali | 25 | Mumbai | 7000.00 |
| 5 | Hardik | 27 | Bhopal | 9000.00 |
| 6 | Komal | 22 | MP | 5000.00 |
+----+----------+-----+-----------+----------+
Explicit Cursors
Explicit cursors are programmer-defined cursors for gaining more control over the context
area. An explicit cursor should be defined in the declaration section of the PL/SQL Block. It is
created on a SELECT Statement which returns more than one row.
Example
Following is a complete example to illustrate the concepts of explicit cursors &minua;
DECLARE
c_id customers.id%type;
c_name customerS.Name%type;
c_addr customers.address%type;
CURSOR c_customers is
SELECT id, name, address FROM customers;
BEGIN
OPEN c_customers;
LOOP
FETCH c_customers into c_id, c_name, c_addr;
EXIT WHEN c_customers%notfound;
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
END LOOP;
CLOSE c_customers;
END;
/
The implicit cursor is automatically declared by oracle every time an sql statement is executed. Whenever
you issue an sql statement, the oracle server opens an area of memory in which the command is parsed
and executed and an implicit cursor which points to this area. Every implicit cursor attribute starts with
sql%.
An explicit cursor is created and managed by the user. And defined on a multi row select statement.
7.What do u understand by database and what is objects in oracle
Ans: A database is defined as a collection of meaningful data. Objects in oracle means Table, Views,
Procedures, Triggers, Synonym etc
Ans: - Complex queries that need to be executed often can be saved in a view. Hence by calling the view
name, query can be executed.
- View is extremely useful when query uses multiple tables. If tables are changed, only the view definition
needs to be changed, not the code where the view is used.
- They prevent undesired access by providing security as the data that is not of interest to a user can be
left out of the view.
Ans: In Oracle, you can create an autonumber field by using sequences. A sequence is an
object in Oracle that is used to generate a number sequence. This can be useful when you need
to create a unique number to act as a primary key.
Create Sequence
You may wish to create a sequence in Oracle to handle an autonumber field.
Syntax
The syntax to create a sequence in Oracle is:
sequence_name
The name of the sequence that you wish to create.
Example
Let's look at an example of how to create a sequence in Oracle.
For example:
This would create a sequence object called supplier_seq. The first sequence number that it
would use is 1 and each subsequent number would increment by 1 (ie: 2,3,4,...}. It will cache up
to 20 values for performance.
If you omit the MAXVALUE option, your sequence will automatically default to:
MAXVALUE 999999999999999999999999999
Now that you've created a sequence object to simulate an autonumber field, we'll cover how to
retrieve a value from this sequence object. To retrieve the next value in the sequence order, you
need to use nextval.
For example:
supplier_seq.NEXTVAL;
This would retrieve the next value from supplier_seq. The nextval statement needs to be used in
a SQL statement. For example:
INSERT INTO suppliers
(supplier_id, supplier_name)
VALUES
(supplier_seq.NEXTVAL, 'Kraft Foods');
This insert statement would insert a new record into the suppliers table. The supplier_id field
would be assigned the next number from the supplier_seq sequence. The supplier_name field
would be set to Kraft Foods.
11.What is a synonym?
Ans: An index is an optional structure associated with a table to have direct access to rows, which can be
created to increase the performance of data retrieval. Index can be created on one or more columns of a
table. Index may also be considered as a ordered list of content of a column.
16.What is a schema?
Ans: The set of objects owned by user account is called the schema.
Ans: Join is a query, which retrieves related columns or rows from multiple tables.
Non-Equi Join - Joining two tables by not equating two common columns.
Outer Join - Joining two tables in such a way that query can also retrieve rows that do not have
corresponding join value in the other table.
Ans: INSTR (String1, String2 (n, (m)), INSTR returns the position of the m-th occurrence of the string 2
in string1. The search begins from nth position of string1.
SUBSTR (String1 n, m) SUBSTR returns a character string of size m in string1, starting from n-th
position of string1.
19.What is difference between CHAR and VARCHAR2? What is the maximum SIZE allowed for
each type?
Ans: CHAR pads blank spaces to the maximum length. VARCHAR2 does not pad blank spaces. For
CHAR the maximum length is 255 and 2000 for VARCHAR2
20.How to access the current value and next value from a sequence?
Ans: Oracle database is comprised of three types of files. One or more datafiles, two are more redo log
files, and one or more control files.
Ans: delete from emp where rowid not in (Select min(rowid) from emp groupby emp_dept, emp-id,
emp_name )
Ans: The Oracle Engine uses a work area for its internal processing in order to execute an SQL statement.
This work area is private to SQL operation and is called Cursor.
Types of Cursor:
Implicit Cursor: If the Oracle engine opened a cursor for its internal processing then it is know as implicit
cursor. It is invoked implicitly.
Explicit Cursor: A cursor which is opened for processing data through a PL/SQL block is know as
Explicit Cursor.
Syntax is SQL%ISOPEN
%ROWCOUNT--- returns number of records processed from cursor syntax is SQL %ROWCOUNT
%FOUND---- returns TRUE if record is fetched successfully else FALSE, syntax is SQL%FOUND
%NOTFOUND-- returns TRUE if record is not fetched successfully else FALSE syntax is SQL
%NOTFOUND Attributes Of a Explicit Cursor %ISOPEN—returns TRUE if cursor is open else FALSE.
Syntax is cursorname%ISOPEN %ROWCOUNT--- returns number of records processed from cursor
syntax is cursorname %ROWCOUNT %FOUND---- returns TRUE if record is fetched successfully else
FALSE, syntax is cursorname %FOUND %NOTFOUND-- returns TRUE if record is not fetched
successfully else FALSE syntax is cursorname %NOTFOUND
Ans: Inline view is a Sub-query that is part of the “From” clause of a select statement. It is a query whose
return values are used in “where” condition of the main query.
Snapshot is the recent copy of a table of a database, or in some cases subset of rows or columns of a table.
It is created at a remote destination system from a master database residing on a server. This helps in
response time improvement in a distributed system environment, as it takes less time for the queries to
retrieve data from a local copy rather than from a database residing in another system. The master table
will be updateable whereas the most snapshots are of “read only” types though it can also be updateable.
We have to pass the automatic refresh criteria for the snapshot through the refresh option while defining
the snapshot.
COMPLETE – Type of Refresh. In complete refresh, the refresh will be done by re executing the
snapshot query again.
FORCE- Type of refresh. In this case, the fast refresh is done if it is possible. Unless the complete refresh
is done. This decision is made by Oracle at the refresh time.
If FAST, COMPLETE or FORCE option is not mentioned, the refresh type is taken as “FORCE” by
default.
START WITH – Specifies when the snapshot will be refreshed for the first time.
NEXT- Specifies the interval at which the automatic refreshes will happen.
If you specify the START WITH option but not the NEXT option , then snapshot will be automatically
refreshed only once. If you specify the NEXT option, but not the START WITH option , then the first
automatic refresh is done according to the interval mentioned by the NEXT option. If both the START
WITH and NEXT options are not passed, then the automatic refresh of the snapshot will not happen.
26.What is a tablespace?
Ans: A database is divided into Logical Storage Units called tablespaces. A tablespace is used to group
the related logical structures together.
Ans: Yes
Ans: SELECT a.emp_name,a.sal FROM emp a WHERE &n - 1= (SELECT COUNT(DISTINCT sal)
FROM emp b WHERE b.sal > a.sal )
-------------------------------------completed by 25/09
Ans: A trigger is a piece of code attached to a table that is executed after specified DML statements
executed on that table. There are 12 types of triggers in PL/SQL that consist of combinations of the
BEFORE, AFTER, ROW, STATEMENT, TABLE, INSERT, UPDATE, DELETE and ALL key words:
For eg: BEFORE ALL ROW INSERT AFTER ALL ROW INSERT BEFORE INSERT AFTER INSERT
Ans: 12 triggers(Oracle).
Ans: ROWID is pseudo column in every table. The physical address of the rows is use to for
the ROWID.IN HEXADECIMAL representation, ROWID is shown as 18 character string of the
following format BBBBBBBBB.RRRR.FFFF (block, row, file) FFFF is the fileid of the datafile that
contains the row. BBBBBBBBB is the address of the datablock within the datafile that contains the row.
RRRR is the ROW NUMBER with the data block that contains the row. They are unique identifiers for
the any row in a table. They are internally used in the construction of indexes.
Rownum is the sequential number of rows in the result set object.
Ans: By rowid
Ans: A LEFT JOIN will take ALL values from the first declared table and matching values from the
second declared table based on the column the join has been declared on. An INNER JOIN will take only
matching values from both tables
Ans: Use the DECODE function. This function is absolutely brilliant and functions like a CASE
statement, and can be used to return different columns based on the values of others.
Ans: Only if the view is a simple horizontal slice through a single table.
36.What is Dual ?
Ans: The DUAL table is a table with a single row and a single column used where a table is syntactically
required.
37.What is the difference between CHAR and VARCHAR ?
Ans: CHAR is fixed length character type at storage level, and that VARCHAR will be variable length.
Ans: No
39.How will the fetch the last inserted record in any table ?
Ans: select column 1, column 2.... From where rowid = (select max(rowid) from table);
Types of integrity constraints : The following integrity constraints are supported by ORACLE:
3. PRIMARY KEY : disallows duplicate values and nulls in a column or set of columns
4. FOREIGN KEY : requires each value in a column or set of columns match a value in a related table's
UNIQUE or PRIMARY KEY.
5. CHECK : disallows values that do not satisfy the logical expression of the constrain
Ans: Referential Integrity : Referential integrity defines the relationships among different columns and
tables in a relational database. It’s called referential integrity because the values in one column or set of
columns refer to or must match the values in a related column or set of columns.
A referential integrity constraint requires that for each row of a table, the value in the foreign key matches
a value in a parent key.
Having Clause: Having clause can be used with GROUP BY clause. Having imposes a condition on the
group by clause which further filters the group created by the GROUP BY clause. Select ename,empno
From Empl Group by empno having empno > 10;
Ans: Locks are mechanisms intended to prevent destructive interaction between users accessing
ORACLE data. ORACLE uses locks to control concurrent access to data. Locks are used to achieve two
important database goals : Consistency : Ensures that the data a user is viewing or changing is not
changed (by other users) until the user is finished with the data. Integrity : Ensures that the database's data
and structures reflect all changes made to them in the correct sequence.
Types of Locks :
4. Distributed Locks
Data Locks : Row Level and Table Level Row Level : Exclusive Locks Table Level
Dictionary Locks :
1. Exclusive DDL Locks
3. Breakable Parse Locks Restrictiveness of Locks : In general, two levels of locking can be used in a
multi-user database: • Exclusive Locks : An exclusive lock prohibits the sharing of the associated
resource. The first transaction to exclusively lock a resource is the only transaction that can alter the
resource until the exclusive lock is released. • Share Locks : A share lock allows the associated resource
to be shared, depending on the operations involved (e.g., several users can read the same data at the same
time). Several transactions can acquire share locks on the same resource. Share locks allow a higher
degree of data concurrency than exclusive locks.
Ans: Foreign key: A foreign key is one or more columns whose values are based on the primary or
candidate key values from another table. Unique key can be null; Primary key cannot be null.
Ans: The TRUNCATE command provides a fast, efficient method for deleting all rows from a table or
cluster.
1. A TRUNCATE statement does not generate any rollback information and it commits immediately; it is
a DDL statement and cannot be rolled back.
2. A TRUNCATE statement does not affect any structures associated with the table being truncated
(constraints and triggers) or authorizations (grants).
3. A TRUNCATE statement also specifies whether space currently allocated for the table is returned to
the containing tablespace after truncation.
4. As a TRUNCATE statement deletes rows from a table (or clustered table), triggers associated with the
table are not fired.
5. Also, a TRUNCATE statement does not generate any audit information corresponding to DELETE
statements if auditing is enabled. Instead, a single audit record is generated for the TRUNCATE statement
being issued.
3. Describe Results
4. Defining outputs
Ans: Parsing : Parsing is the process of: 1. Translating a SQL statement, verifying it to be a valid
statement 2. Performing data dictionary lookups to check table and column definitions 3. Acquiring parse
locks on required objects so that their definitions do not change during the statement's parsing 4.
Checking privileges to access referenced schema objects 5. Determining the execution plan to be used
when executing the statement 6. Loading it into a shared SQL area 7. For distributed statements, routing
all or part of the statement to remote nodes that contain referenced data
Ans: Hints are suggestions that you give the optimizer for optimizing a SQL statement. Hints allow you
to make decisions usually made by the optimizer.
TYPES OF HINTS :
ALL_ROWS : The ALL_ROWS hint explicitly chooses the cost-based approach to optimize a statement
block with a goal of best throughput.
FIRST_ROWS : The FIRST_ROWS hint explicitly chooses the cost-based approach to optimize a
statement block with a goal of best response time.
FULL : The FULL hint explicitly chooses a full table scan for the specified table.
ROWID : The ROWID hint explicitly chooses a table scan by ROWID for the specified table.
CLUSTER : The CLUSTER hint explicitly chooses a cluster scan to access the specified table.
HASH : The HASH hint explicitly chooses a hash scan to access the specified table.
INDEX : The INDEX hint explicitly chooses an index scan for the specified table.
AND_EQUAL: The AND_EQUAL hint explicitly chooses an execution plan that uses an access path that
merges the scans on several single-column indexes. (You can specify multiple indexes through this hint)
INDEX_ASC: The INDEX_ASC hint explicitly chooses an index scan for the specified table. If the
statement uses an index range scan, ORACLE scans the index entries in ascending order of their indexed
values.
INDEX_DESC: The INDEX_DESC hint explicitly chooses an index scan for the specified table. If the
statement uses an index range scan, ORACLE scans the index entries in descending order of their indexed
values.
ORDERED : The ORDERED hint causes ORACLE to join tables in the order in which they appear in the
FROM clause.
USE_NL : The USE_NL hint causes ORACLE to join each specified table to another row source with a
nested loops join using the specified table as the inner table.
USE_MERGE : The USE_MERGE hint causes ORACLE to join each specified table with another row
source with a sort-merge join.
Ans: EXCEPTION_INIT Pragma : To handle unnamed internal exceptions, you must use the OTHERS
handler or the pragma EXCEPTION_INIT. A "pragma" is a compiler directive, which can be thought of
as a parenthetical remark to the compiler. Pragmas (also called "pseudoinstructions") are processed at
compile time, not at run time. They do not affect the meaning of a program; they simply convey
information to the compiler. The predefined pragma EXCEPTION_INIT tells the PL/SQL compiler to
associate an exception name with an Oracle error number. That allows you to refer to any internal
exception by name and to write a specific handler for it. You code the pragma EXCEPTION_INIT in the
declarative part of a PL/SQL block, subprogram, or package
Ans: JSP Query : The JSP Query is a standard query for number to words conversion, used especially for
converting amount in number into equivalent amount in words. The query is as follows : Select to_char
( to_date ( ‘&no’, ‘J’ ), ‘JSP’ ) words from dual; For eg : Select to_char ( to_date ( '23949','j' ), 'JSP' )
"words" from dual; The value that can pass to &no cannot exceed 7 digits.
Ans: Physical: Data files, Redo Log files, Control file. Logical : Tables, Views, Tablespaces, etc.
51.What is “Check Constraints” and “with check options” and “Default Specification”?
Ans: CHECK Integrity Constraints: A CHECK integrity constraint on a column or a set of columns
requires that a specified condition be true or unknown (ie. Not false) for every row of the table. If a DML
statement is issued so that the condition of the CHECK constraint evaluates to false, the statement is
rolled back. With check Option: With Check option restricts inserts and updates performed through the
view to prevent them from creating rows that the view cannot itself select .based on where clause of the
create view statement. For eg: Create or replace view Women As select name from Employee Where
Sex= ‘Female’ With Check Option; Default Specification It supplies a default value if column value is
not specified on INSERT It can contain literals (constants) and SQL functions, USER, SYSDATE,
sequence It cannot include references to any columns.
Ans: 254(Oracle)
Ans: No
Consider a sequence whose currval is 1 and gets incremented by 1 by using the nextval reference we
get the next number 2. Suppose at this point we issue an rollback and again issue a nextval. What
will the output be ?
Ans: 3
Ans: No
55.What is the difference between alias and synonym ?
Ans: Alias is temporary and used in one query. Synonym is permanent and can be used in several queries
Ans: The tkprof tool is a tuning tool used to determine cpu and execution times for SQL statements. You
use it by first setting timed_statistics to true in the initialization file and then turning on tracing for either
the entire database via the sql_trace parameter or for the session using the ALTER SESSION command.
Once the trace file is generated you run the tkprof tool against the trace file and then look at the output
from the tkprof tool . This can also be used to generate explain plan output.
Ans: The EXPLAIN PLAN command is a tool to tune SQL statements. To use it you must have an
explain_table generated in the user you are running the explain plan for. This is created using
the utlxplan.sql script. Once the explain plan table exists you run the explain plan command giving as its
argument the SQL statement to be explained. The explain_plan table is then queried to see the execution
plan of the statement. Explain plans can also be run using tkprof.
Ans: Throughout its operation, ORACLE maintains a set of "virtual" tables that record current database
activity. These tables are called Dynamic performance tables. Because dynamic performance tables are
not true tables, they should not be accessed by most users. However, database administrators can query
these tables and can create views on the tables and grant access to those views to other users. The
dynamic performance tables are owned by SYS and their names all begin with V_$. Views are created on
these tables, and then synonyms are created for the views. The synonym names begin with V$.
59.What is Savepoint ?
Ans: Savepoints are intermediate markers that can be declared in long transactions that contain many
SQL statements. By using savepoints, you can arbitrarily mark your work at any point within a long
transaction. This allows you the option of later rolling back all work performed from the current point in
the transaction to a declared savepoint within the transaction.
60.What is Deadlocks?
Ans: A deadlock is a situation that can occur in multi-user systems that causes some number of
transactions to be unable to continue work. A deadlock can occur when two or more users are waiting for
data locked by each other. It typically happens when each of two or more users are waiting to access a
resource that another user has already locked. This creates a deadlock situation because each user is
waiting for resources held by the other user. Eg Transaction 1 Time Point Transaction 2 UPDATE emp 1
UPDATE emp SET sal = sal*1.1 SET sal = 1342 WHERE empno = 1000; WHERE empno = 2000;
UPDATE emp 2 UPDATE emp SET sal = sal*1.1 SET sal = 1342 WHERE empno = 2000; WHERE
empno = 1000; ORA-00060 3 deadlock detected while waiting for resource
61.What is Privilege ?
Ans: A privilege is a right to execute a particular type of SQL statement or to access another user's object.
Types of privileges : • system privileges • object privileges System Privileges : System privileges allow
users to perform a particular systemwide action, or to perform a particular action on a particular type of
object. E.g. Create Tablespace, Delete the row of any table, etc. Object Privileges : Object privileges
allow users to perform a particular action on a specific object. E.g. Delete row of specific table, etc. Roles
: Roles are named groups of related privileges that are granted to users or other roles. Advantages of
Roles : 1. Reduced granting of privileges 2. Dynamic privilege management (Changing of privileges) 3.
Selective availability of privileges (Enalbling/Disabling roles) 4. Application awareness
(Enalbling/Disabling of roles by application)
Ans: Two Phase Commit is a mechanism wherein ORACLE automatically controls and monitors the
commit or rollback of a distributed transaction and maintains the integrity of the global database. The
Phases of the Two-Phase Commit Mechanism :
• Prepare phase : The global co-ordinator (initiating node) asks participants to prepare (to promise to
commit or rollback the transaction, even if there is a failure).
• Commit phase : If all participants respond to the co-ordinator that they are prepared, the co-ordinator
asks all nodes to commit the transaction; if all participants cannot prepare, the co-ordinator asks all nodes
to roll back the transaction.
Ans: Snapshots are read-only copies of a master table (or multiple tables) located on a remote node. A
snapshot can be queried, but not updated; only the master table can be updated. A snapshot is periodically
refreshed to reflect changes made to the master table. A snapshot is a full copy of a table or a subset of a
table that reflects a recent state of the master table. A snapshot is defined by a distributed query that
references one or more master tables, view, or other snapshots. Simple vs. Complex Snapshots : Each row
in a simple snapshot is based on a single row in a single remote table. Therefore, a simple snapshot's
defining query has no GROUP BY or CONNECT BY clauses, or subqueries, joins, or set operations. If a
snapshot's defining query contains any of these clauses or operations, it is referred to as a complex
snapshot. Internals of Snapshot Creation: When a snapshot is created, several operations are performed
internally by ORACLE: • ORACLE (at the snapshot node) creates a table to store the rows retrieved by
the snapshot's defining query; this is the snapshot's base table. • ORACLE creates a read-only view on the
SNAP$ table (base table) for queries issued against the snapshot. • ORACLE creates a second local view
on the remote master table. It uses this view when it refreshes the snapshot. • Additionally, if the snapshot
is a simple snapshot, ORACLE creates an index on the SNAP$ table. All of these internal objects are
created in the schema of the snapshot. Do not alter, change data in, or delete these objects manually.
Ans: A REF CURSOR is basically a data type. A variable created based on such a data type is generally
called a cursor variable. A cursor variable can be associated with different queries at run-time. The
primary advantage of using cursor variables is their capability to pass result sets between sub programs
(like stored procedures, functions, packages etc.).
Ans: Row chaining occurs when a VARCHAR2 value is updated and the length of the new value is
longer than the old value and won’t fit in the remaining block space. This results in the row chaining to
another block. It can be reduced by setting the storage parameters on the table to appropriate values. It
can be corrected by export and import of the effected table.
66.Describe hit ratio as it pertains to the database buffers. What is the difference between
instantaneous and cumulative hit ratio and which should be used for tuning?
Ans: The hit ratio is a measure of how many times the database was able to read a value from the buffers
verses how many times it had to re-read a data value from the disks. A value greater than 80-90% is good,
less could indicate problems. If you simply take the ratio of existing parameters this will be a cumulative
value since the database started. If you do a comparison between pairs of readings based on some
arbitrary time span, this is the instantaneous ratio for that time span. An instantaneous reading gives more
valuable data since it will tell you what your instance is doing for the time it was generated over.
Ans: A Cartesian product is the result of an unrestricted join of two or more tables. The result set of a
three table Cartesian product will have x * y * z number of rows where x, y, z correspond to the number
of rows in each table involved in the join.
68.What is a mutating table error and how can you get around it?
Ans: This happens with triggers. It occurs because the trigger is trying to update a row it is currently
using. The usual fix involves either use of views or temporary tables so the database is selecting from one
while updating the other.
69.What are SQLCODE and SQLERRM and why are they important for PL/SQL developers?
Ans: SQLCODE returns the value of the error number for the last error encountered. The SQLERRM
returns the actual error message for the last error encountered. They can be used in exception handling to
report, or, store in an error log table, the error that occurred in the code. These are especially useful for
the WHEN OTHERS exception.
Ans: Transactional Triggers fire in response to transaction processing events. These events represent
points during application processing at which Oracle Forms needs to interact with the data source.
Examples of such events include updating records, rolling back to savepoints, and committing
transactions. By default, Oracle Forms assumes that the data source is an ORACLE database, and issues
the appropriate SQL statements to optimize transaction processing accordingly. However, by defining
transactional triggers and user exits, you can build a form to interact with virtually any data source,
including even non-relational databases and flat files. Calling User Exits When you define transactional
triggers to interact with a non-ORACLE data source, you will usually include a call to a user exit in the
appropriate triggers. The code in your user exit interacts with the non-ORACLE data source. Once the
user exit has performed the appropriate function (as indicated by the trigger from which it was called), it
returns control to Oracle Forms for subsequent processing. For example, a user exit called from an On-
Fetch trigger might be responsible for retrieving the appropriate number of records from the non-
ORACLE data source. Once the records are retrieved, Oracle Forms takes over the display and
management of those records in the form interface, just as it would if the records had been fetched from
an ORACLE database. Uses for Transactional Triggers • Transactional triggers, except for the commit
triggers, are primarily intended to access certain data sources other than Oracle. • The logon and logoff
transactional triggers can also be used with Oracle databases to change connections at run time.
Ans: Function Overloading : Packages allow you to overload procedures or functions. Overloading a
procedure means creating multiple procedures with the same name in the same package, each taking
arguments of different number or datatype.
Ans: The constructs of a procedure, function or a package are : • variables and constants • cursors •
exceptions
75.What are cascading triggers? What is the maximum no of cascading triggers at a time?
Ans: When a statement in a trigger body causes another trigger to be fired, the triggers are said to be
cascading. Max = 32
Ans: The & operator means that the PL SQL block requires user input for a variable. The && operator
means that the value of this variable should be the same as inputted by the user previously for this same
variable.
77.If all the values from a cursor have been fetched and another fetch is issued, the output will be?
Ans: PL/SQL requires that you declare an identifier before using it. Therefore, you must declare a
subprogram before calling it. This declaration at the start of a subprogram is called forward declaration. A
forward declaration consists of a subprogram specification terminated by a semicolon.
Ans: %ROWTYPE allows you to associate a variable with an entire table row. The %TYPE associates a
variable with a single column type.
83.What is RAISE_APPLICATION_ERROR ?
Ans: DBMS_STANDARD provides a procedure named raise_application_error, which lets you issue
user-defined error messages. That way, you can report errors to an application and avoid returning
unhandled exceptions. The calling syntax is : raise_application_error(error_number, error_message);
where error_number is a negative integer in the range -20000...-20999 and error_message is a character
string up to 2048 bytes in length. An application can call raise_application_error only from an executing
stored subprogram. When called, raise_application_error ends the subprogram, rolls back any database
changes it made, and returns a user-defined error number and message to the application. The error
number and message can be trapped like any ORACLE error. The calling application gets a PL/SQL
exception, which it can process using the error-reporting functions SQLCODE and SQLERRM in an
OTHERS handler. • The statement Raise_Application_Error can be called either from a procedure body
or from an exception handler. • Irrespective of whether an error occurred or not, a raise_application_error
command always raises an exception in the calling program (eg a forms trigger). If an exception handler
is not written in that forms trigger, then a forms error occurs.