Documente Academic
Documente Profesional
Documente Cultură
Blocurile PL/SQL sunt procesate de motorul PL/SQL care poate fi rezident pe ORACLE
SERVER sau pe un instrument de dezvoltare (ex.: Oracle Forms, Reports, JDeveloper etc.);
Multe instrumente ORACLE au propriul motor PL/SQL (ex.: Oracle Forms, Reports,
JDeveloper etc.);
se folosete (;) dup fiecare instruciune SQL sau instruciune de control PL/SQL;
Blocuri anonime;
Funcii stocate i funcii de aplicaii;
Proceduri stocate i proceduri de aplicaii;
Pachete;
Declanatoare (triggeri) pe baza de date / de aplicaii.
Blocurile anonime:
sunt nedenumite;
nu sunt stocate n baza de date;
se declar inline, n locul n care se dorete execuia lor;
se execut n momentul rulrii.
Exemplu:
DECLARE
v_variabila varchar2(5);
BEGIN
SELECT coloana INTO v_variabila FROM tabela;
EXCEPTION
WHEN excepie THEN aciune
END;
/
--se pune inainte de fiecare bloc SET SERVEROUTOUT ON, ca sa-ti afiseze dupa rularea
blocului ce face acel bloc, in cazul nostru, daca nu punem acest 'serveroutput on', dupa ce
vom rula blocul, ne va afisa in partea de jos doar 'annonymus block completed', adica iti va
spune ca nu ai erori, dar nu-ti va afisa nimic
set serveroutput on
--avem nevoie de o variabila in care sa memoram numele angajatului ( cum foloseam in C un
aux, un fel de variabila ajutatoare)
DECLARE
--declaram o variabila in care sa fie memorat numele angajatului, varchar2(25) este tipul
variabilei, este un sir de caractere.
v_nume varchar2(25);
BEGIN
--stocam (SELECT) ce avem nevoie (nume) in (INTO) variabila declarata (v_nume) , iar
acest nume se afla in tabela angajati(=>FROM angajati), angajatul cu id-ul 100(=>avem o
conditie care trebuie indeplinita)
2
set serveroutput on
DECLARE
--trebuie sa declaram o variabila in care sa memoram prenumele angajatului
v_prenume varchar2(25);
BEGIN
--stocam (SELECT) numele in(INTO) variabila declarata(v_prenume),prenume care se afla
in tabela angajati, al angajatului cu id-ul 50 (deci trebuie sa indeplineasca o conditie)
EXCEPTION WHEN
NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Nu exista nici un angajat cu id-ul 50');
END;
/
set serveroutput on
BEGIN
--folosim mai multe blocuri, iar acestea vor afisa pe rand
--blocul in care stocam numele angajatului
<<bloc_nume>>
DECLARE
--declaram o variabila in care vom stoca numele
b_nume varchar2(25);
BEGIN
SELECT nume INTO b_nume FROM angajati WHERE id_angajat=101;
4
DBMS_OUTPUT.PUT_LINE('Numele
bloc_nume.b_nume);
angajatului
este:
'||
END bloc_nume;
--blocul in care stocam prenumele angajatului
<<bloc_prenume>>
DECLARE
b_prenume varchar2(25);
BEGIN
SELECT prenume INTO b_prenume FROM angajati WHERE
id_angajat=101;
DBMS_OUTPUT.PUT_LINE('Prenumele angajatului este: '||
bloc_prenume.b_prenume);
END bloc_prenume;
--blocul in care stocam email-ul angajatului
<<bloc_email>>
DECLARE
b_email varchar2(25);
BEGIN
SELECT email INTO b_email FROM angajati WHERE id_angajat=101;
DBMS_OUTPUT.PUT_line('Email-ul angajatului este: '||
bloc_email.b_email);
END bloc_email;
END;
/
Exemple:
CREATE [OR REPLACE] PROCEDURE nume_procedura
IS
.
BEGIN
.
[EXCEPTION]
.
END;
/
CREATE [OR REPLACE] FUNCTION nume_functie
RETURN tip_data
IS
BEGIN
RETURN valoare
[EXCEPTION]
END;
/
Pachete de programe - grupeaz proceduri, funcii.
Declanatori pe baza de date - blocuri PL/SQL asociate tabelelor (de baz sau virtuale) i
lansate automat n execuie cnd are loc o comanda de manipulare.
Declanatori de aplicaie - blocuri PL/SQL asociate unor evenimente din cadrul aplicaiei
(de exemplu: deplasarea mouse-ului, apsarea unui buton) i lansate n execuie automat.
3. Operatori n PL/SQL
Operator
+, -, *, /, ** (op. exponenial)
AND, OR, NOT
Caracteristici
Operatori aritmetici
Operatori logici
Operatori de comparaie
IN(list)
LIKE
IS NULL
||
@
&
sau &&
:=
Operator de atribuire
n cadrul instruciunilor descriptive sunt suportate toate tipurile de funcii SQL (inclusiv
funciile de grup n cadrul instruciunii SELECT);
Instruciunile PL/SQL:
Suport funcii la nivel de nregistrare (single-row): numerice, caracter, data, de
conversie etc.;
NU suport funcii de grup (SUM, MIN, MAX, AVG, COUNT, STDDEV) sau
funcia DECODE. De exemplu nu se pot utiliza construcii de forma: IF
DECODE(...) THEN ... sau IF AVG(...) THEN ...
PL/SQL convertete tipurile de date dinamic (de exemplu: o valoare numeric la o variabil
char);
conversii implicite: caracter <-> numeric si caracter <->data;
conversii explicite: se utilizeaz funciile TO_DATE, TO_NUMBER, TO_CHAR.
Not: Un bloc PL/SQL nu este o tranzacie. Comenzile Commit/ Rollback/ Savepoint sunt
independente de bloc, dar pot s apar n cadrul acestuia.
PL/SQL NU suport comenzile din cadrul limbajului pentru controlul datelor (Data Control
Language - DCL)
GRANT
REVOKE