SQL Interview Questions
1. The most important DDL statements in SQL
are:
CREATE TABLE - creates a new database table
ALTER TABLE - alters (changes) a database table
DROP TABLE - deletes a database table
CREATE INDEX - creates an index (search key)
DROP INDEX - deletes an index
2. Operators used in SELECT statements.
= Equal
<> or != Not equal
> Greater than
< Less than
>= Greater than or equal
<= Less than or equal
BETWEEN Between an inclusive range
LIKE Search for a pattern
3. SELECT statements:
SELECT column_name(s) FROM table_name
SELECT DISTINCT column_name(s) FROM table_name
SELECT column FROM table WHERE column operator value
SELECT column FROM table WHERE column LIKE pattern
SELECT column,SUM(column) FROM table GROUP BY column
SELECT column,SUM(column) FROM table GROUP BY column HAVING
SUM(column) condition value
Note that single quotes around text values and numeric values
should not be enclosed in quotes. Double
quotes may be acceptable in some databases.
4. The SELECT INTO Statement is most often
used to create backup copies of tables or for archiving records.
SELECT column_name(s) INTO newtable [IN externaldatabase] FROM
source
SELECT column_name(s) INTO newtable [IN externaldatabase] FROM
source WHERE column_name operator value
5. The INSERT INTO Statements:
INSERT INTO table_name VALUES (value1, value2,....)
INSERT INTO table_name (column1, column2,...) VALUES (value1,
value2,....)
6. The Update Statement:
UPDATE table_name SET column_name = new_value WHERE column_name =
some_value
7. The Delete Statements:
DELETE FROM table_name WHERE column_name = some_value
Delete All Rows:
DELETE FROM table_name or DELETE * FROM table_name
8. Sort the Rows:
SELECT column1, column2, ... FROM table_name ORDER BY columnX,
columnY, ..
SELECT column1, column2, ... FROM table_name ORDER BY columnX DESC
SELECT column1, column2, ... FROM table_name ORDER BY columnX
DESC, columnY ASC
9. The IN operator may be used if you know the
exact value you want to return for at least one of the columns.
SELECT column_name FROM table_name WHERE column_name IN
(value1,value2,..)
10. BETWEEN ... AND
SELECT column_name FROM table_name WHERE column_name BETWEEN
value1 AND value2 The values can be numbers, text, or dates.
11. What is the use of CASCADE CONSTRAINTS?
When this clause is used with the DROP command, a parent table can
be dropped even when a child table exists.
12. Why does the following command give a
compilation error?
DROP TABLE &TABLE NAME; Variable names should start with an
alphabet. Here the table name starts with an '&' symbol.
13. Which system tables contain information on
privileges granted and privileges obtained?
USER_TAB_PRIVS_MADE, USER_TAB_PRIVS_RECD
14. Which system table contains information on
constraints on all the tables created?obtained?
USER_CONSTRAINTS.
15. What is the difference between TRUNCATE
and DELETE commands?
16. State true or false. !=, <>, ^= all
denote the same operation?
True.
17. State true or false. EXISTS, SOME, ANY are
operators in SQL?
True.
18. What will be the output of the following
query?
SELECT REPLACE(TRANSLATE(LTRIM(RTRIM('!! ATHEN !!','!'), '!'),
'AN', '**'),'*','TROUBLE') FROM DUAL;?
19. What does the following query do?
SELECT SAL + NVL(COMM,0) FROM EMP;?
This displays the total salary of all employees. The null values
in the commission column will be replaced by 0 and added to salary.
20. What is the advantage of specifying WITH
GRANT OPTION in the GRANT command?
The privilege receiver can further grant the privileges he/she has
obtained from the owner to any other user.
21. Which command executes the contents of a
specified file?
START or @.
22. What is the value of comm and sal after
executing the following query if the initial value of ‘sal’ is 10000
UPDATE EMP SET SAL = SAL + 1000, COMM = SAL*0.1;?
sal = 11000, comm = 1000.
23. Which command displays the SQL command in
the SQL buffer, and then executes it?
RUN.
24. What command is used to get back the
privileges offered by the GRANT command?
REVOKE.
25. What will be the output of the following
query? SELECT DECODE(TRANSLATE('A','1234567890','1111111111'),
'1','YES', 'NO' );? NO.
Explanation : The query checks whether a given string is a
numerical digit.
26. Which date function is used to find the
difference between two dates?
MONTHS_BETWEEN.
27. What operator performs pattern matching?
LIKE operator.
28. What is the use of the DROP option in the
ALTER TABLE command?
It is used to drop constraints specified on the table.
29. What operator tests column for the absence
of data?
IS NULL operator.
30. What are the privileges that can be
granted on a table by a user to others?
Insert, update, delete, select, references, index, execute, alter,
all.
31. Which function is used to find the largest
integer less than or equal to a specific value?
FLOOR.
32. Which is the subset of SQL commands used
to manipulate Oracle Database structures, including tables?
Data Definition Language (DDL).
33. What is the use of DESC in SQL?
DESC has two purposes. It is used to describe a schema as well as
to retrieve rows from table in descending order.
Explanation :
The query SELECT * FROM EMP ORDER BY ENAME DESC will display the
output sorted on ENAME in descending order.
34. What command is used to create a table by
copying the structure of another table?
CREATE TABLE .. AS SELECT command
Explanation:
To copy only the structure, the WHERE clause of the SELECT command
should contain a FALSE statement as in the following.
CREATE TABLE NEWTABLE AS SELECT * FROM EXISTINGTABLE WHERE 1=2;
If the WHERE condition is true, then all the rows or rows
satisfying the condition will be copied to the new table.
35. TRUNCATE TABLE EMP;DELETE FROM EMP;
Will the outputs of the above two commands differ?
Both will result in deleting all the rows in the table EMP..
36. What is the output of the following query
SELECT TRUNC(1234.5678,-2) FROM DUAL;?
1200.
37. What are the wildcards used for pattern
matching.?
_ for single character substitution and % for multi-character
substitution.
38. What is the parameter substitution symbol
used with INSERT INTO command?
&
39. What's an SQL injection?
SQL Injection is when form data contains an SQL escape sequence
and injects a new SQL query to be run.
40. What is difference between TRUNCATE &
DELETE
TRUNCATE commits after deleting entire table i.e., cannot be
rolled back. Database triggers do not fire on TRUNCATE
DELETE allows the filtered deletion. Deleted records can be rolled
back or committed. Database triggers fire on DELETE.
41. What is a join? Explain the different
types of joins?
Join is a query, which retrieves related columns or rows from multiple
tables.
Self Join - Joining the table with itself.
Equi Join - Joining two tables by equating two common columns.
Non-Equi Join - Joining two tables by 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.
42. What is the sub-query?
Sub-query is a query whose return values are used in filtering
conditions of the main query.
43. What is correlated sub-query?
Correlated sub-query is a sub-query, which has reference to the
main query.
44. Explain CONNECT BY PRIOR?
Retrieves rows in hierarchical order eg.
select empno, ename from emp where.
45. Difference between SUBSTR and INSTR?
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.
46. Explain UNION, MINUS, UNION ALL and
INTERSECT?
INTERSECT - returns all distinct rows selected by both queries.
MINUS -
returns all distinct rows selected by the first query but not by the second.
UNION -
returns all distinct rows selected by either query
UNION ALL - returns all rows selected by either query, including all
duplicates.
47. What is ROWID?
ROWID is a pseudo column attached to each row of a table. It is 18
characters long, blockno, rownumber are the components of ROWID.
48. What is the fastest way of accessing a row
in a table?
Using ROWID.
CONSTRAINTS
49. What is an integrity constraint?
Integrity constraint is a rule that restricts values to a column
in a table.
50. What is referential integrity constraint?
Maintaining data integrity through a set of rules that restrict
the values of one or more columns of the tables based on the values of primary
key or unique key of the referenced table.
51. What is the usage of SAVEPOINTS?
SAVEPOINTS are used to subdivide a transaction into smaller parts.
It enables rolling back part of a transaction. Maximum of five save points are
allowed.
52. What is ON DELETE CASCADE?
When ON DELETE CASCADE is specified Oracle maintains referential
integrity by automatically removing dependent foreign key values if a
referenced primary or unique key value is removed.
53. What are the data types allowed in a
table?
CHAR, VARCHAR2, NUMBER, DATE, RAW, LONG and LONG RAW.
54. What is difference between CHAR and
VARCHAR2? What is the maximum SIZE allowed for each type?
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.
55. How many LONG columns are allowed in a
table? Is it possible to use LONG columns in WHERE clause or ORDER BY?
Only one LONG column is allowed. It is not possible to use LONG
column in WHERE or ORDER BY clause.
56. What are the pre-requisites to modify
datatype of a column and to add a column with NOT NULL constraint?
- To modify the datatype of a column the column must be empty.
- To add a column with NOT NULL constrain, the table must be
empty.
57. Where the integrity constraints are stored
in data dictionary?
The integrity constraints are stored in USER_CONSTRAINTS.
58. How will you activate/deactivate integrity
constraints?
The integrity constraints can be enabled or disabled by ALTER
TABLE ENABLE CONSTRAINT / DISABLE CONSTRAINT.
59. If unique key constraint on DATE column is
created, will it validate the rows that are inserted with SYSDATE?
It won't, Because SYSDATE format contains time attached with it.
60. What is a database link?
Database link is a named path through which a remote database can
be accessed.
61. How to access the current value and next
value from a sequence? Is it possible to access the current value in a session
before accessing next value?
Sequence name CURRVAL, sequence name NEXTVAL. It is not possible.
Only if you access next value in the session, current value can be accessed.
62.What is CYCLE/NO CYCLE in a Sequence?
CYCLE specifies
that the sequence continue to generate values after reaching either maximum or
minimum value. After pan-ascending sequence reaches its maximum value, it
generates its minimum value. After a descending sequence reaches its minimum,
it generates its maximum.
NO CYCLE specifies that the sequence cannot generate more values after
reaching its maximum or minimum value.
63. What are the advantages of VIEW?
- To protect some of the columns of a table from other users.
- To hide complexity of a query.
- To hide complexity of calculations.
64. Can a view be updated/inserted/deleted? If
Yes - under what conditions?
A View can be updated/deleted/inserted if it has only one base
table if the view is based on columns from one or more tables then insert,
update and delete is not possible.
65. If a view on a single base table is
manipulated will the changes be reflected on the base table?
If changes are made to the tables and these tables are the base
tables of a view, then the changes will be reference on the view.
66. Which of the following statements is true
about implicit cursors?
1. Implicit cursors are used for SQL statements that are not
named.
2. Developers should use implicit cursors with great care.
3. Implicit cursors are used in cursor for loops to handle data
processing.
4. Implicit cursors are no longer a feature in Oracle.
67. Which of the following is not a feature of
a cursor FOR loop?
1. Record type declaration.
2. Opening and parsing of SQL statements.
3. Fetches records from cursor.
4. Requires exit condition to be defined.
66. A developer would like to use referential
datatype declaration on a variable. The variable name is EMPLOYEE_LASTNAME, and
the corresponding table and column is EMPLOYEE, and LNAME, respectively. How
would the developer define this variable using referential datatypes?
1. Use employee.lname%type.
2. Use employee.lname%rowtype.
3. Look up datatype for EMPLOYEE column on LASTNAME table and use
that.
4. Declare it to be type LONG.
67. Which three of the following are implicit
cursor attributes?
1. %found
2. %too_many_rows
3. %notfound
4. %rowcount
5. %rowtype
68. If left out, which of the following would
cause an infinite loop to occur in a simple loop?
1. LOOP
2. END LOOP
3. IF-THEN
4. EXIT
69. Which line in the following statement will
produce an error?
1. cursor action_cursor is
2. select name, rate, action
3. into action_record
4. from action_table;
5. There are no errors in this statement.
70. The command used to open a CURSOR FOR loop
is
1. open
2. fetch
3. parse
4. None, cursor for loops handle cursor opening implicitly.
71. What happens when rows are found using a
FETCH statement
1. It causes the cursor to close
2. It causes the cursor to open
3. It loads the current row values into variables
4. It creates the variables to hold the current row values
72. Read the following code:
10. CREATE OR REPLACE PROCEDURE find_cpt
11. (v_movie_id {Argument Mode} NUMBER,
v_cost_per_ticket {argument mode} NUMBER)
12. IS
13. BEGIN
14. IF v_cost_per_ticket > 8.5 THEN
15. SELECT cost_per_ticket
16. INTO v_cost_per_ticket
17. FROM gross_receipt
18. WHERE movie_id = v_movie_id;
19. END IF;
20. END;
Which mode should be used for
V_COST_PER_TICKET?
1. IN
2. OUT
3. RETURN
4. IN OUT
73. Read the following code:
22. CREATE OR REPLACE TRIGGER
update_show_gross
23. {trigger information}
24. BEGIN
25. {additional code}
26. END;
The trigger code should only execute when the
column, COST_PER_TICKET, is greater than $3. Which trigger information will you
add?
1. WHEN (new.cost_per_ticket > 3.75)
2. WHEN (:new.cost_per_ticket > 3.75
3. WHERE (new.cost_per_ticket > 3.75)
4. WHERE (:new.cost_per_ticket > 3.75)
74. What is the maximum number of handlers
processed before the PL/SQL block is exited when an exception occurs?
1. Only one
2. All that apply
3. All referenced
4. None
77. For which trigger timing can you reference
the NEW and OLD qualifiers?
1. Statement and Row 2. Statement only 3. Row only 4. Oracle Forms
trigger
78. Read the following code:
CREATE OR REPLACE FUNCTION
get_budget(v_studio_id IN NUMBER)
RETURN number IS
v_yearly_budget NUMBER;
BEGIN
SELECT yearly_budget
INTO v_yearly_budget
FROM studio
WHERE id = v_studio_id;
RETURN v_yearly_budget;
END;
Which set of statements will successfully
invoke this function within SQL*Plus?
1. VARIABLE g_yearly_budget NUMBER
EXECUTE g_yearly_budget := GET_BUDGET(11);
2. VARIABLE g_yearly_budget NUMBER
EXECUTE :g_yearly_budget := GET_BUDGET(11);
3. VARIABLE :g_yearly_budget NUMBER
EXECUTE :g_yearly_budget := GET_BUDGET(11);
4. VARIABLE g_yearly_budget NUMBER
31. CREATE OR REPLACE PROCEDURE update_theater
32. (v_name IN VARCHAR v_theater_id IN NUMBER) IS
33. BEGIN
34. UPDATE theater
35. SET name = v_name
36. WHERE id = v_theater_id;
37. END update_theater;
79. When invoking this procedure, you
encounter the error:
ORA-000:Unique
constraint(SCOTT.THEATER_NAME_UK) violated.
How should you modify the function to handle
this error?
1. An user defined exception must be declared and associated
with the error code and handled in the EXCEPTION section.
2. Handle the error in EXCEPTION section by referencing the error
code directly.
3. Handle the error in the EXCEPTION section by referencing the
UNIQUE_ERROR predefined exception.
4. Check for success by checking the value of SQL%FOUND
immediately after the UPDATE statement.
80. Read the following code:
40. CREATE OR REPLACE PROCEDURE
calculate_budget IS
41. v_budget studio.yearly_budget%TYPE;
42. BEGIN
43. v_budget := get_budget(11);
44. IF v_budget < 30000
45. THEN
46. set_budget(11,30000000);
47. END IF;
48. END;
You are about to add an argument to CALCULATE_BUDGET.
What effect will
this have?
1. The GET_BUDGET function will be marked invalid and must be
recompiled
before the next execution.
2. The SET_BUDGET function will be marked invalid and must be
recompiled
before the next execution.
3. Only the CALCULATE_BUDGET procedure needs to be recompiled.
4. All three procedures are marked invalid and must be recompiled.
81. Which procedure can be used to create a
customized error message?
1. RAISE_ERROR
2. SQLERRM
3. RAISE_APPLICATION_ERROR
4. RAISE_SERVER_ERROR
82. The CHECK_THEATER trigger of the THEATER
table has been disabled.
Which command can you issue to enable this
trigger?
1. ALTER TRIGGER check_theater ENABLE;
2. ENABLE TRIGGER check_theater;
3. ALTER TABLE check_theater ENABLE check_theater;
4. ENABLE check_theater;
83. Examine this database trigger
52. CREATE OR REPLACE TRIGGER prevent_gross_modification
53. {additional trigger information}
54. BEGIN
55. IF TO_CHAR(sysdate, DY) = MON
56. THEN
57. RAISE_APPLICATION_ERROR(-20000,Gross receipts cannot be
deleted on
Monday);
58. END IF;
59. END;
This trigger must fire before each DELETE of the GROSS_RECEIPT
table.
It should fire only once for the entire DELETE statement. What
additional
information must you add?
1. BEFORE DELETE ON gross_receipt
2. AFTER DELETE ON gross_receipt
3. BEFORE (gross_receipt DELETE)
4. FOR EACH ROW DELETED FROM gross_receipt
84. Examine this function:
61. CREATE OR REPLACE FUNCTION set_budget
62. (v_studio_id IN NUMBER, v_new_budget IN NUMBER) IS
63. BEGIN
64. UPDATE studio
65. SET yearly_budget = v_new_budget
WHERE id = v_studio_id;
IF SQL%FOUND THEN
RETURN TRUEl;
ELSE
RETURN FALSE;
END IF;
COMMIT;
END;
Which code must be added to successfully compile this function?
1. Add RETURN right before the IS keyword.
2. Add RETURN number right before the IS keyword.
3. Add RETURN boolean right after the IS keyword.
4. Add RETURN boolean right before the IS keyword.
85. Under which circumstance must you
recompile the package body after recompiling the package specification?
1. Altering the argument list of one of the package constructs
2. Any change made to one of the package constructs
3. Any SQL statement change made to one of the package constructs
4. Removing a local variable from the DECLARE section of one of
the
package constructs
86. Procedure and Functions are explicitly
executed. This is different from a database trigger. When is a database trigger
executed?
1. When the transaction is committed
2. During the data manipulation statement
3. When an Oracle supplied package references the trigger
4. During a data manipulation statement and when the transaction
is committed
87. Which Oracle supplied package can you use
to output values and messages from database triggers, stored procedures and
functions within SQL*Plus?
1. DBMS_DISPLAY 2. DBMS_OUTPUT 3. DBMS_LIST 4. DBMS_DESCRIBE
88. What occurs if a procedure or function
terminates with failure without being handled?
1. Any DML statements issued by the construct are still pending
and can be committed or rolled back.
2. Any DML statements issued by the construct are committed
3. Unless a GOTO statement is used to continue processing within
the BEGIN section,the construct terminates.
4. The construct rolls back any DML statements issued and returns
the unhandled
exception to the calling environment.
89. Examine this code
71. BEGIN
72. theater_pck.v_total_seats_sold_overall :=
theater_pck.get_total_for_year;
73. END;
For this code to be successful, what must be true?
1. Both the V_TOTAL_SEATS_SOLD_OVERALL variable and the
GET_TOTAL_FOR_YEAR
function must exist only in the body of the THEATER_PCK package.
2. Only the GET_TOTAL_FOR_YEAR variable must exist in the
specification of the
THEATER_PCK package.
3. Only the V_TOTAL_SEATS_SOLD_OVERALL variable must exist in the
specification of the THEATER_PCK package.
4. Both the V_TOTAL_SEATS_SOLD_OVERALL variable and the
GET_TOTAL_FOR_YEAR function must exist in the specification of the
THEATER_PCK package.
90. A stored function must return a value
based on conditions that are determined at runtime. Therefore, the SELECT
statement cannot be hard-coded and must be created dynamically when the
function is executed. Which Oracle supplied package will enable this feature?
1. DBMS_DDL
2. DBMS_DML
3. DBMS_SYN
4. DBMS_SQL
91 How to implement ISNUMERIC function in SQL
*Plus ?
Method 1:
Select length (translate(trim
(column_name),'+-.0123456789',''))from dual;
Will give you a zero if it is a number or greater than zero if not
numeric
(actually gives the count of non numeric characters)
Method 2:
select instr(translate('wwww','abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXX'),'X') FROM dual;
It returns 0 if it is a number, 1 if it is not.
92 How to Select last N records from a Table?
select * from (select rownum a, CLASS_CODE,CLASS_DESC from clm)
where a > ( select (max(rownum)-10) from clm) Here N = 10
The following query has a Problem of performance in the execution
of the following
query where the table ter.ter_master have 22231 records. So the
results are obtained
after hours.
Cursor rem_master(brepno VARCHAR2) IS
select a.* from ter.ter_master a
where NOT a.repno in (select repno from ermast) and
(brepno = 'ALL' or a.repno > brepno)
Order by a.repno
What are steps required tuning this query to
improve its performance?
-Have an index on TER_MASTER.REPNO and one on ERMAST.REPNO
-Be sure to get familiar with EXPLAIN PLAN. This can help you
determine the execution
path that Oracle takes. If you are using Cost Based Optimizer
mode, then be sure that
your statistics on TER_MASTER are up-to-date. -Also, you can
change your SQL to:
SELECT a.*
FROM ter.ter_master a
WHERE NOT EXISTS (SELECT b.repno FROM ermast b
WHERE a.repno=b.repno) AND
(a.brepno = 'ALL' or a.repno > a.brepno)
ORDER BY a.repno;
93. What is the difference between Truncate
and Delete interms of Referential Integrity?
DELETE removes one or more records in a table, checking
referential Constraints (to see if there are dependent child records) and
firing any DELETE triggers. In the order you are deleting (child first then
parent) There will be no problems.
TRUNCATE removes ALL records in a table. It does not execute any
triggers. Also, it
only checks for the existence (and status) of another foreign key
Pointing to the
table. If one exists and is enabled, then you will get The
following error. This
is true even if you do the child tables first.
ORA-02266: unique/primary keys in table referenced by enabled
foreign keys
You should disable the foreign key constraints in the child tables
before issuing
the TRUNCATE command, then re-enable them afterwards.
PL-SQL Interview Questions
1. Describe the difference between a
procedure, function and anonymous pl/sql block.
Level: Low
Expected answer : Candidate should mention use of DECLARE
statement, a function must
return a value while a procedure doesn?t have to.
2. What is a mutating table error and how can
you get around it?
Level: Intermediate
Expected answer: 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.
3. Describe the use of %ROWTYPE and %TYPE in
PL/SQL
Level: Low
Expected answer: %ROWTYPE allows you to associate a variable with
an entire table row.
The %TYPE associates a variable with a single column type.
4. What packages (if any) has Oracle provided
for use by developers?
Expected answer: Oracle provides the DBMS_ series of packages.
There are many
which developers should be aware of such as DBMS_SQL, DBMS_PIPE,
DBMS_TRANSACTION,
DBMS_LOCK, DBMS_ALERT, DBMS_OUTPUT, DBMS_JOB, DBMS_UTILITY,
DBMS_DDL, UTL_FILE. If
they can mention a few of these and describe how they used them,
even better. If
they include the SQL routines provided by Oracle, great, but not
really what
was asked.
5. Describe the use of PL/SQL tables
Expected answer: PL/SQL tables are scalar arrays that can be
referenced by a
binary integer. They can be used to hold values for use in later
queries
or calculations. In Oracle 8 they will be able to be of the
%ROWTYPE designation,
or RECORD.
6. When is a declare statement needed ?
The DECLARE statement is used in PL/SQL anonymous blocks such as
with stand alone, non-stored PL/SQL procedures. It must come first in a PL/SQL
stand alone file if it is used.
7. In what order should a open/fetch/loop set
of commands in a PL/SQL block be implemented if you use the NOTFOUND cursor
variable in the exit when statement? Why?
Expected answer: OPEN then FETCH then LOOP followed by the exit
when. If not specified in this order will result in the final return being done
twice because of the way the %NOTFOUND is handled by PL/SQL.
8. What are SQLCODE and SQLERRM and why are
they important for PL/SQL developers?
Expected answer: 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.
9. How can you find within a PL/SQL block, if
a cursor is open?
Expected answer: Use the %ISOPEN cursor status variable.
10. How can you generate debugging output from
PL/SQL?
Expected answer: Use the DBMS_OUTPUT package. Another possible
method is to just use the SHOW ERROR command, but this only shows errors. The
DBMS_OUTPUT package can be used to show intermediate results from loops and the
status of variables as the procedure is executed. The new package UTL_FILE can
also be used.
11. What are the types of triggers?
Expected Answer: There are 12 types of triggers in PL/SQL that
consist of
combinations of the BEFORE, AFTER, ROW, TABLE, INSERT, UPDATE,
DELETE and
ALL key words:
BEFORE ALL ROW INSERT
AFTER ALL ROW INSERT
BEFORE INSERT
AFTER INSERT etc.
SQL / SQLPlus Interview Questions
created by Vaibhav Srivastava
1. How can variables be passed to a SQL
routine?
Expected answer: By use of the & symbol. For passing in
variables the numbers
1-8 can be used (&1, &2,...,&8) to pass the values
after the command into the
SQLPLUS session. To be prompted for a specific variable, place the
ampersanded
variable in the code itself:
"select * from dba_tables where owner=&owner_name;"
. Use of double
ampersands tells SQLPLUS to resubstitute the value for each
subsequent
use of the variable, a single ampersand will cause a reprompt for
the
value unless an ACCEPT statement is used to get the value from the
user.
2. You want to include a carriage
return/linefeed in your output from a SQL script, how can you do this?
Expected answer: The best method is to use the CHR() function
(CHR(10) is a return/linefeed) and the concatenation function "||".
Another method, although it is hard to document and isn?t always portable is to
use the return/linefeed as a part of a quoted string.
3. How can you call a PL/SQL procedure from
SQL?
Expected answer: By use of the EXECUTE (short form EXEC) command.
4. How do you execute a host operating system
command from within SQL?
Expected answer: By use of the exclamation point "!" (in
UNIX and some other OS) or the HOST (HO) command.
5. You want to use SQL to build SQL, what is
this called and give an example
Expected answer: This is called dynamic SQL. An example would be:
set lines 90 pages 0 termout off feedback off verify off
spool drop_all.sql
select ?drop user ?||username||? cascade;? from dba_users
where username not in ("SYS?,?SYSTEM?);
spool off
Essentially you are looking to see that they know to include a
command (in this case DROP USER...CASCADE;) and that you need to concatenate
using the ?||? the values selected from the database.
6. What SQLPlus command is used to format
output from a select?
Expected answer: This is best done with the COLUMN command.
7. You want to group the following set of
select returns, what can you group on?
Max(sum_of_cost), min(sum_of_cost),
count(item_no), item_no
Expected answer: The only column that can be grouped on is the
"item_no" column, the rest have aggregate functions associated with
them.
8. What special Oracle feature allows you to
specify how the cost based system treats a SQL statement?
Level: Intermediate to high Expected answer: The COST based system
allows the use of HINTs to control the optimizer path selection. If they can
give some example hints such as FIRST ROWS, ALL ROWS, USING INDEX, STAR, even
better.
9. You want to determine the location of
identical rows in a table before attempting to place a unique index on the
table, how can this be done?
Level: High Expected answer: Oracle tables always have one
guaranteed unique column, the rowid column. If you use a min/max function
against your rowid and then select against the proposed primary key you can
squeeze out the rowids of the duplicate rows pretty quick. For example: select
rowid from emp e where e.rowid > (select min(x.rowid) from emp x where
x.emp_no = e.emp_no); In the situation where multiple columns make up the
proposed key, they must all be used in the where clause.
10. What is a Cartesian product?
Expected answer: 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.
11. You are joining a local and a remote
table, the network manager complains about the traffic involved, how can you
reduce the network traffic?
Level: High Expected answer: Push the processing of the remote
data to the remote instance by using a view to pre-select the information for
the join. This will result in only the data required for the join being sent
across.
12. What is the default ordering of an ORDER
BY clause in a SELECT statement?
Expected answer: Ascending
13. What is tkprof and how is it used?
Level: Intermediate to high Expected answer: 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.
14. What is explain plan and how is it used?
Level: Intermediate to high Expected answer: 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.
15. How do you set the number of lines on a
page of output? The width?
Level: Low Expected answer: The SET command in SQLPLUS is used to
control the number of lines generated per page and the width of those lines,
for example SET PAGESIZE 60 LINESIZE 80 will generate reports that are 60 lines
long with a line width of 80 characters. The PAGESIZE and LINESIZE options can
be shortened to PAGES and LINES.
16. How do you prevent output from coming to
the screen?
Level: Low
Expected answer: The SET option TERMOUT controls output to the
screen. Setting TERMOUT OFF turns
off screen output. This option can be shortened to TERM.
17. How do you prevent Oracle from giving you
informational messages during and after a SQL statement execution?
Level: Low Expected answer: The SET options FEEDBACK and VERIFY
can be set to OFF.
18. How do you generate file output from SQL?
Answer: By use of the SPOOL command