Download presentation
1
PL/SQL Agenda: Basic PL/SQL block structure
Example procedures and functions Executing PL/SQL from SQL*Plus Exceptions Packages
2
More PL/SQL - block structure
IS BEGIN EXCEPTION END; -- defines type of block (procedure, function, anonymous) and the way it is called -- declare any variables used in the block -- use variables and other PL/SQL objects to perform actions -- handle any problems that arise during execution of the block Block Header Declaration Header REQUIRED Execution Section Exception Section
3
PL/SQL… Is not case sensitive Uses the same datatypes as SQL
Also has boolean, record, table, varray and LOB Allows reference datatypes %type and %rowtype Allows comments /* and */ for multiline and -- for single line Uses := for assignment Uses ; to indicate end of line (instruction)
4
PL/SQL - example DECLARE loop_count BINARY_INTEGER := 0; BEGIN LOOP
INSERT INTO count_table VALUES (loop_count); DBMS_output.put_line (‘loop_count is ’ || to_char(loop_count)); loop_count := loop_count + 1; EXIT WHEN loop_count = 6; END LOOP; END;
5
Scott.GIVE_RAISE CREATE OR REPLACE PROCEDURE give_raise (
p_deptno IN number, p_raise_percent IN number ) AS BEGIN update emp set sal = sal + (sal * p_raise_percent * .01) where deptno = p_deptno; commit; END give_raise;
6
Another example… CREATE OR REPLACE FUNCTION get_company_name (comp_id_in IN company.id%TYPE) RETURN varchar2 IS cname company.name%TYPE; BEGIN SELECT name INTO cname FROM company WHERE id = comp_id_in; RETURN cname; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL; WHEN OTHERS DBMS_OUTPUT.PUT_LINE (‘error code= ‘ || SQLCODE); DBMS_OUTPUT.PUT_LINE (‘error msg= ‘ || SQLERRM); END;
7
Cursors Implicit Explicit Created automatically in Oracle
Don’t need to be declared Can be used only when 1 and only 1 record is returned Explicit Declared in declaration section attributes specifying the state of the cursor %notfound, %found, %rowcount, %isopen Use “cursor for loop” to work with FOR item IN cursor LOOP … END LOOP; Substitute cursor name and row variable for cursor and item Opens cursor and fetches results into cursor automatically
8
Another PL/SQL example…
DECLARE current_bldg_code VARCHAR2(5); CURSOR location_cursor IS SELECT room, capacity FROM location WHERE bldg_code = current_bldg_code FOR UPDATE of capacity; location_row location_cursor%rowtype; BEGIN current_bldg_code := ‘LIB’; FOR location_row IN location_cursor LOOP UPDATE location Set capacity = capacity +1 WHERE CURRENT OF location_cursor; END LOOP; COMMIT; END; From Morrison & Morrison, p. 247
9
Using PL/SQL - functions
From SQL*Plus command line Functions require that you create a variable in SQL*Plus to hold the value returned first variable cname varchar2(100) then select get_company_name(1) from dual; valid commands to execute stored function f1 returns number) from SQL*Plus. exec :a := f1; execute :a := f1; call f1() into :a; begin :a := f1; end; select f1 from dual;
10
Using PL/SQL - procedures
From SQL*Plus command line Procedures don’t return a value, so Execute Give_raise(20,10); valid commands to execute stored procedure p1 from SQL*Plus. exec p1; execute p1; call p1(); begin p1; end;
11
Debugging PL/SQL Remember the Oracle error message facility – will help figure out the problem Comment out lines that may be causing problems Use dbms_output.put_line to show variable values Fix from the top down – 1 error may cause multiple error messages Data dictionary views: user_errors, user_source
12
Exception types NO_DATA_FOUND TOO_MANY_ROWS DUP_VAL_ON_INDEX And more…
Create your own
13
Another PL/SQL example…
FUNCTION build_name (name_in IN VARCHAR2, sex_in IN VARCHAR2) RETURN VARCHAR2 IS unknown_sex EXCEPTION; name_out VARCHAR2(100); BEGIN IF sex_in =‘M’ THEN name_out := ‘Mr. ‘ || name_in; ELSIF sex_in =‘F’ THEN name_out := ‘Ms. ‘ || name_in; ELSE RAISE unknown_sex END IF; RETURN name_out; EXCEPTION WHEN unknown_sex THEN DBMS_OUTPUT.PUT_LINE (‘Unable to determine gender of individual!’); END;
14
Packages Structure of Packages Advantages of Packages
package header vs. package body Advantages of Packages invalidated objects hiding details of code code maintainability
15
Oracle provided packages
DBMS_output DBMS_job DBMS_pipe And more… Set serveroutput on size 4000; Dbms_output.put_line (‘text to be displayed’);
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.