Sunteți pe pagina 1din 8

Facultatea de Cibernetic, Statistic i Informatic Economic

SGBD Oracle seminarul 1

Introducere n PL/SQL Procedural Language extension to SQL


1. Caracteristici generale:

Construciile PL/SQL conin structuri de control procedurale i comenzi descriptive SQL;

PL/SQL este un limbaj procedural structurat pe bloc, programele putnd fi mprite n


blocuri logice;

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.);

Tipurile de date din SQL pot fi folosite n PL/SQL;

Programarea n PL/SQL este modularizat se utilizeaz blocurile care grupeaz


instruciunile.
2. Blocuri PL/SQL:
Orice unitate PL/SQL conine unul sau mai multe blocuri, complet separate sau imbricate.
Componentele unui bloc PL/SQL:
Un bloc PL/SQL este compus din pn la 3 seciuni: declarativ (opional), executabil
(obligatorie) i de tratare a excepiilor (opional).
DECLARE (Opional)
variabile, cursori, excepii
BEGIN (Obligatoriu)
comenzi SQL (asigur accesul la baza de date)
structuri de programare procedural PL/SQL
EXCEPTION (Opional)
aciuni ce se execut cnd apare o eroare
END; (Obligatoriu)
Observaii:

comenzile SQL asigur accesul la baza de date;

operaiile efectuate cu variabilele PL/SQL n cadrul instruciunilor procedurale nu presupun


accesarea bazei de date;

se folosete (;) dup fiecare instruciune SQL sau instruciune de control PL/SQL;

blocul PL/SQL se termin cu (;);

se folosete (/) pentru a lansa un bloc anonim n bufferul SQL;


o eroare n PL/SQL este tratat ca o excepie;

Facultatea de Cibernetic, Statistic i Informatic Economic


SGBD Oracle seminarul 1

Tipuri de blocuri 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;
/

Sa se afiseze numele angajatului cu id-ul 100 (id_angajat).(este un bloc anonim,


nu va fi stocat in baza de date).

--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

Facultatea de Cibernetic, Statistic i Informatic Economic


SGBD Oracle seminarul 1

SELECT nume INTO v_nume FROM angajati WHERE id_angajat=100;


--afisam numele angajatului stocat in variabila declarata

DBMS_OUTPUT.PUT_LINE('Numele angajatului cu id-ul 100 este: '||


v_nume);
END;
/

Sa se afiseze prenumele angajatului cu id-ul (id_angajat) 50, iar daca nu exista


id-ul sa se afiseze un mesaj corespunzator.(Este un bloc
anonim, nu va fi stocat in baza de date, daca nu exista id-ul 50, vom trata o exceptie)

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)

SELECT prenume INTO v_prenume FROM angajati where id_angajat=50;


--afisam prenumele angajatului stocat in variabila declarata

DBMS_OUTPUT.PUT_LINE('Prenumele angajatului este: '||v_prenume);


--in cazul in care nu exista un angajat cu id-ul 50, ca sa nu ne dea eroare, o tratam ca o
exceptie, iar in acest caz putem cere programului sa ne afiseze un mesaj, ca sa ne dam seama
de ce nu a afisat nimic

EXCEPTION WHEN
NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Nu exista nici un angajat cu id-ul 50');
END;
/

Facultatea de Cibernetic, Statistic i Informatic Economic


SGBD Oracle seminarul 1

Blocuri anonime imbricate


se pot imbrica mai multe blocuri;
acestea se pot eticheta cu <<eticheta_bloc>> , iar variabilele din cadrul blocurilor se pot
utiliza astfel: eticheta_bloc.variabila.
BEGIN
.
<< eticheta_bloc >>
DECLARE
..
BEGIN
..
END eticheta_bloc;
END;
/

Sa se afiseze numele, prenumele si email-ul angajatului cu id-ul 101 in blocuri


anonime imbricate.

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

Facultatea de Cibernetic, Statistic i Informatic Economic


SGBD Oracle seminarul 1

DBMS_OUTPUT.PUT_LINE('Numele
bloc_nume.b_nume);

angajatului

este:

'||

--trebuie sa specificam blocul in care se afla variabila pe care vrem sa o afisam,


nume_bloc.variabila
--am terminat cu acest bloc, deci putem sa-l inchidem

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;
/

Proceduri, funcii: (sunt detaliate in alt seminar)


blocuri PL/SQL cu un nume;
se pot stoca la nivel de ORACLE SERVER(proceduri/funcii stocate) sau la nivel de aplicaie
(DEVELOPER Forms si Reports).

Facultatea de Cibernetic, Statistic i Informatic Economic


SGBD Oracle seminarul 1

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

BETWEEN ... AND ...

Operator de verificare a apartenenei la un interval

IN(list)
LIKE
IS NULL
||
@
&

Operator de verificare a apartenenei la o list de valori


Operator de comparare cu un ablon
% - oricte caractere; _ - un caracter;
Operator care verific dac o variabil are valoarea NULL
Operator de concatenare
Operator de conectare la distan
Operatori pentru adresarea variabilelor de substituie
6

Facultatea de Cibernetic, Statistic i Informatic Economic


SGBD Oracle seminarul 1

sau &&
:=

Operator de atribuire

4. Funcii SQL suportate n PL/SQL

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 ...

5. Conversii n blocurile PL/SQL

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.

6. Comenzi SQL suportate n PL/SQL

PL/SQL permite folosirea comenzilor de manipulare a datelor (LMD):


SELECT
INSERT
UPDATE
DELETE
PL/SQL permite folosirea comenzilor de control al tranzaciilor:
COMMIT
ROLLBACK
SAVEPOINT

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 de definire a datelor (LDD)


CREATE
ALTER
DROP
RENAME
TRUNCATE
7

Facultatea de Cibernetic, Statistic i Informatic Economic


SGBD Oracle seminarul 1

PL/SQL NU suport comenzile din cadrul limbajului pentru controlul datelor (Data Control
Language - DCL)
GRANT
REVOKE

S-ar putea să vă placă și