Documente Academic
Documente Profesional
Documente Cultură
1
Forma programului PL/SQL :
Orice constructie PL/SQL contine unu sau mai multe blocuri. Blocurile pot
fi total separate sau pot fi imbricate. De aceea un bloc poate fi o mica parte dintr-
un alt bloc care la randul lui poate fi o parte dintr-o intreaga unitate de cod.
• DECLARE (optional)
Defineste obiectele PL/SQL care vor fi folosite in interiorul blocului ;
• BEGIN (obligatoriu)
Contine instructiuni executabile
• EXCEPTION(optional)
Ce sa se intample daca in executia instructiunilor apar erori.
• END (obligatoriu)
Blocurile anonime
Sunt blocurile care nu au nume. Sunt declarate intr-un punct al aplicatiei acolo
unde vor rula si sunt pasate motorului PL/SQL pentru executia lor imediata.
• BEGIN si END sunt elemente obligatorii si intre ele sunt incluse instructiunile
ce vor fi executate.Aceasta sectiune esta deseori numita sectiunea executabila a
unui bloc.
• DECLARE este optional. Aici se definesc obiectele PL/SQL cum ar fi
variabilele, constantele, cursoarele si exceptiile definite de utilizator care vor fi
folosite in interiorul blocului.
• EXCEPTION capteaza conditiile de eroare predefinite. Aici se definesc
actiuni care vor fi facute in conditiile specificate. Sectiunea EXCEPTION este
optionala si trebuie sa preceada imediat cuvantul cheie END.
2
Structura bloc a subprogramelor PL/SQL
Header
IS
Sectiune de declaratii
BEGIN
Instructiuni executabile
EXCEPTION
Sectiune de exceptii
END;
Subprogramele
Subprogramele sunt blocuri PL/SQL cu nume care pot avea parametri si pot fi
apelate. PL/SQL are doua tipuri de subprograme numite proceduri si functii.
• Headerul este relevant doar pentru blocurile cu nume si determina modul in
care o unitate program este apelata sau invocata.Headerul determina tipul
blocului PL/SQL (procedura , functie) , contine numele unitatii program, lista
parametrilor(daca are) si o clauza RETURN (doar pentru functii).
• Elementele BEGIN si END sunt obligatorii, si intre ele sunt incluse
instructiunile ce vor fi executate.Aceasta sectiune este deseori referita ca o
sectiune executabila a unui bloc.
• DECLARE este optional si se aplica doar blocurilor anonime. Aici se definesc
obiectele PL/SQL cum ar fi variabilele, constantele, cursoarele si exceptiile
definite de utilizator care vor fi folosite in interiorul blocului.
• EXCEPTION capteaza conditiile de eroare predefinite.Aici se definesc actiuni
care vor fi facute in conditiile specificate. Sectiunea EXCEPTION este
optionala si trebuie sa preceada imediat cuvantul END.
3
Avantajele Subprogramelor:
Imbunatatirea performantelor :
• Evita parcurgerea de mai multe ori a unei zone SQL partajata de catre
utilizatori multipli
• Evita parsarii programului PL/SQL in executie prin parsarea in timpul
compilarii.
• Reduce numarul de apeluri la baza de date si permite reducerea traficului prin
retea
4
Exemplul de mai sus creeaza o procedura stocata, fara nici un argument,
folosita pentru a înregistra numele de utilizator si data curenta într-o tabela.
1. SQL *Plus
SQL>EXECUTE log_execution
2. Alta procedura :
CREATE OR REPLACE PROCEDURE fire_emp (v_id IN
emp.empno%TYPE) IS
BEGIN
log_execution;
DELETE FROM emp
WHERE empno=v_id;
END fire_emp;
4. Alte medii.
5
Proceduri stocate
O procedura este un bloc PL/SQL cu nume care executa o actiune. Exista doua
tipuri de proceduri:
- proceduri stocate pe serverul de date
- proceduri pe partea de client (dezvoltate cu instrumente Oracle)
6
O procedura este creata folosind instructiunea CREATE [OR REPLACE]
PROCEDURE :
Pentru a crea o procedura stocata din mediul SQL*Plus trebuie urmati urmatorii
pasi:
• se scrie codulu procedurii intr-un editor de texte asociat si se salveaza
intr-un fisier script;
• se ruleaza fisierul script din mediul SQL*Plus pentru a compila codul
sursa si pentru a stoca procedura in baza de date.
• se apeleaza procedura dintr-un mediu ce interactioneaza cu serverul de
date pentru a vedea daca aceasta se executa corect :
7
Exista mai multe moduri de a transmite parametri unei proceduri ca in figura
urmatoare:
8
SQL> CREATE OR REPLACE PROCEDURE query_emp
1 (v_id IN emp.empno%TYPE,
2 v_name OUT emp.ename%TYPE,
3 v_salary OUT emp.sal%TYPE,
4 v_comm OUT emp.comm%TYPE)
5 IS
6 BEGIN
7 SELECT ename, sal, comm
8 INTO v_name, v_salary, v_comm
9 FROM emp
10 WHERE empno = v_id;
11 END query_emp;
12 /
SQL> START emp_query.sql
Procedure created.
SQL> VARIABLE g_name varchar2(15)
SQL> VARIABLE g_salary number
SQL> VARIABLE g_comm number
SQL> EXECUTE query_emp (7654, :g_name, :g_salary,
2 :g_comm)PL/SQL procedure successfully completed.
SQL> PRINT g_name
G_NAME
---------------
MARTIN
Exemplu de procedura cu parametru de tip IN OUT:
9
4 add_dept ( v_loc => 'DALLAS', v_name =>
'EDUCATION') ;
5 add_dept ( v_loc => 'BOSTON') ;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
------ -------------- -------------
... ... ...
41 unknown unknown
42 TRAINING NEW YORK
43 EDUCATION DALLAS
44 unknown BOSTON
DECLARE
v_id NUMBER := 7900;
BEGIN
raise_salary(v_id); --invoke procedure
COMMIT;
...
END;
SQL> CREATE OR REPLACE PROCEDURE process_emps
2 IS
3 CURSOR emp_cursor IS
4 SELECT empno
5 FROM emp;
6 BEGIN
7 FOR emp_rec IN emp_cursor LOOP
8 raise_salary(emp_rec.empno); --invoke procedure
9 END LOOP;
10 COMMIT;
11 END process_emps;
12 /
Exemplu:
SQL> DROP PROCEDURE raise_salary;
Procedure dropped.
Concluzii
10
Exercitii
11