Programmierung in SQL
SQL Queries and PL/SQL with Oracle SQL Developer
There are a few policies that make writing and testing queries and other code more convenient.
Termination characters
When writing several queries into one file each should be terminated with a semicolon. That way,
execute command
(F9/
)
and explain plan
(F6/
)
will pick the statement at the
cursor position and execute the action only for this statement. For example:
SELECT name, population FROM Country; SELECT name, country, province FROM city WHERE name LIKE 'Freib%';
However, PL/SQL code has to be terminated by a semicolon, a newline, and a slash to separate it correctly from other statements, e.g.:
CREATE TYPE coastline_table AS TABLE OF VARCHAR2(30); / SELECT name, CAST(COLLECT(DISTINCT sea) AS coastline_table) coastlines FROM Country JOIN geo_sea ON code=country GROUP BY name;
Executing parts of a statement
By highlighting a part of a statement, an action (execute, explain, run script) will be performed only for the selection. Of course, the chosen part has to be a valid statement—e.g., a query without its WHERE-clause:
SELECT * FROM Country
WHERE code='de';
Run Script
The command run script
(F5/
)
normally takes the whole input file and executes every statement. Results and (error) messages will be
shown in the script output window. By highlighting parts of the file the execution may be restricted
to fewer statements. Sometimes it is also useful to run a single query as script in order to display
its results in the script output window (plain text) instead of getting the usual result table.
SELECT name, capital FROM Country;
Comments
Line comments, starting with '--', and block comments, starting with '/*' and ending with '*/', are supported. For example:
/***************** * A simple query *****************/ SELECT name -- country name, unique FROM country;
Functions, Procedures, and Types
Unfortunatley, when creating functions, procedures, and types there
are no meaningful messages when the source has errors.
The SQL*Plus command SHOW ERRORS does
not work in SQL Developer.
However, the creation
process will succeed and the new object can be selected in the connections tree.
The code editor (available in the context menu) shows errors and messages
after compiling the source
(Ctrl-Shift-F9/
).
CREATE TYPE coastline_table AS TABLE OF VARCHR2(30); / Warning: Type created with compilation errors.
DBMS Output
For testing and debugging PL/SQL code it is helpful to use DBMS_OUTPUT.PUT_LINE() to show messages
during the execution. They appear in the DBMS output window if switched on
(
).
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO WORLD!');
END;
/
anonymous block completed
Explain Plan
Oracle provides the explain-plan-command to inspect the execution plan of a statement. It can be
executed by the UI of the SQL Developer
(F6/
)
or in script form. The example shows both ways.
EXPLAIN PLAN SET STATEMENT_ID='correlation' FOR SELECT CORR(population, area) FROM Country; SELECT id, cardinality "ROWS", operation, projection, options, object_name, position "COST/POSITION" FROM Plan_table START WITH id = 0 AND statement_id = 'correlation' CONNECT BY PRIOR id = parent_id AND statement_id = 'correlation' ORDER BY level ASC, position ASC;
If the statment id is left out, the plan table has to be empty (DELETE FROM Plan_table). More information on the meaning of the columns can be found in Oracle's PLAN_TABLE reference. The following statement uses a recursive WITH and selects all excution plans:
WITH
execution_plan(id, plan_id) AS
(
SELECT 0, plan_id
FROM Plan_Table
WHERE id=0
UNION ALL
SELECT p.id, p.plan_id
FROM execution_plan e join Plan_Table p
ON e.id=parent_id
AND e.plan_id=p.plan_id
)
SEARCH DEPTH FIRST BY id SET lvl
SELECT
statement_id, plan_id, lvl, id, cardinality "ROWS", operation,
projection, options, object_name, position "COST/POSITION"
FROM execution_plan JOIN Plan_Table USING(id, plan_id)
ORDER BY plan_id, lvl ASC, position ASC;
