Sunteți pe pagina 1din 33

Universitatea

Politehnica
Bucureti

Facultatea de
Automatic i
Calculatoare

Catedra de
Calculatoare

Laborator 1
Blocuri de instruciuni PL/SQL
Autori:
Conf. Dr. Ing. Alexandru Boicea
As. Drd. Ing. Ciprian-Octavian Truic

Cuprins
Introducere n PL/SQL
Blocuri de instruciuni PL/SQL
Blocuri anonime
Blocuri nlnuite
Blocuri imbricate

Rularea blocurilor PL/SQL n SQL*Plus

03.10.2015

Laborator 1

Introducere n PL/SQL
PL/SQL este un limbaj structurat pe blocuri
Are caracteristici de procesare procedural i
de tratare a erorilor
Blocurile pot fi de dou tipuri:
Blocuri anonime
Subprograme(proceduri, funcii sau triggere)

03.10.2015

Laborator 1

Blocuri anonime
Blocul anonim are cea mai simpl structur i
este compus din trei pri:
Declare conine definirea tuturor variabilelor
care vor fi folosite n procesul de execuie
Execuie conine instruciuni DML i bucle de
execuie
Excepii conine rutinele de interceptare i
tratare a erorilor

03.10.2015

Laborator 1

Blocuri anonime
Fiecare bloc ncepe cu unul dintre cuvintele
cheie declare sau begin
Cuvntul begin este punctul de nceput al
blocului
nainte de executarea unui bloc se golete
bafferul SQL

03.10.2015

Laborator 1

Blocuri anonime
Structura logic a unui bloc PL/SQL anonim
este:
DECLARE
Seciune pentru declararea de variabile

BEGIN
Seciune pentru instruciuni

EXCEPTION
Seciune pentru interceptarea i tratarea erorilor

END;
03.10.2015

Laborator 1

Blocuri anonime
Ex. 1. S se selecteze numele angajatului cu
id-ul 7839.

03.10.2015

Laborator 1

Blocuri anonime
Obs. Pentru a afia mesaje n SQL*Plus i SQL
Developer se va folosi comanda:
set serveroutput on;
Obs. Funcia care afieaz mesaje n SQL*Plus
i SQL Developer este:
dbms_output.put_line(string);
Concatenarea irurilor de caractere se face
folosind operatorul ||:
Numele angajatului este ||nume
03.10.2015

Laborator 1

Blocuri anonime
Obs. Pentru a folosi select ntr-un bloc se va
folosi o structur de forma:
SELECT COLOANA1, COLOANA2,. INTO
VARIABILA1, VARIABILA2 FROM TABEL1,
Variabilele sunt declarate n seciunea declare

Obs. Blocurile declare i exception nu sunt


obligatorii.

03.10.2015

Laborator 1

Blocuri anonime
Ex. 2. S se insereze un nou angajat cu id-ul
1234, numele Georgescu, funcia Clerk, salariu
1250 i managerul cu id-ul 7566.

03.10.2015

Laborator 1

10

Blocuri nlnuite
Blocurile anonime pot fi nlnuite;
Execuia se face secvenial;
Declararea variabilelor pentru toate blocurile
nlnuite se face o singur data n seciunea
DECLARE.

03.10.2015

Laborator 1

11

Blocuri nlnuite
Structura logic pentru un bloc nlnuit este:
DECLARE variabile bloc 1 i bloc 2
BEGIN
BEGIN blocul 1
EXEPTION interceptarea i tratarea excepiilor bloc 1
END; sfrit bloc 1
BEGIN bloc 2
EXCEPTION interceptarea i tratarea excepiilor bloc 2
END; sfrit bloc 2
END;
03.10.2015

Laborator 1

12

Blocuri nlnuite
Ex. 3. S se insereze un nou angajat cu id-ul
1235 introdus de la tastatura, numele Ionescu,
funcia Analyst. Dup insert s se adauge
pentru acest angajat un comision de 200.

03.10.2015

Laborator 1

13

Blocuri nlnuite

03.10.2015

Laborator 1

14

Blocuri nlnuite
Obs. Pentru a da o variabil de la tastatur se
folosete &;
n exemplul de mai sus:
ecuson emp.empno%type := &empid
Obs. tiind c variabila ecuson va trebui s fie
de acelai tip precum coloana empno din
tabelul emp, am folosit tipul de variabil
corelat %type.

03.10.2015

Laborator 1

15

Blocuri imbricate

Blocurile imbricate sunt blocuri care se


execut n interiorul altui bloc;
Se mai numesc i sub-blocuri;
Variabile pot fi transmise de la bloc la subbloc, nu i invers.

03.10.2015

Laborator 1

16

Blocuri imbricate

Structura logic a unui bloc imbricat


DECLARE -- variabile bloc 1, bloc 2, bloc 3
BEGIN
BEGIN -- bloc 1
BEGIN -- bloc 2
BEGIN -- bloc 3
EXCEPTION -- tratare erori bloc 3
END; -- bloc 3
EXCEPTION -- tratare erori bloc 2
END; -- bloc 2
EXCEPTION -- tratare erori bloc 1
END; -- bloc 1
END;
03.10.2015

Laborator 1

17

Blocuri imbricate

Ex. 4. S se adauge un nou angajat, apoi s se


modifice comisionul pentru acesta.

03.10.2015

Laborator 1

18

Blocuri imbricate

03.10.2015

Laborator 1

19

Blocuri Imbricate
Observatii:
Comentariile pe mai multe linii se delimiteaz cu
/* ..... */
Comentariile pe o singur linie se marcheaz cu
dou linii orizontale - Primul bloc face o inregistrare folosind variabile
de substituire (&&ecuson);
Al doilea bloc folosete variabila substituit
ecuson (&ecuson) definit n primul bloc.
03.10.2015

Laborator 1

20

Rularea blocurilor PL/SQL n SQL*Plus


Blocurile PL/SQL pot fi editate direct n linia de
comand sau pot fi editate n orice editor de
text
n SQL*Plus, editorul setat implicit se
acceseaz tastnd comanda edit (sau
prescurtarea ed) sau folosind meniul Editor
din bara de meniu
Fiierele se salveaz cu extensia .sql sau .txt

03.10.2015

Laborator 1

21

Rularea blocurilor PL/SQL n SQL*Plus


Comand

Abreviere

Utilizare

APPEND text

A text

Adaug text la sfritul liniei curente

CHANGE

C/old/new

Schimb old text cu new text n linia curent

CHANGE

C/text/

terge textul din linia curent

CLEAR BUFFER

CL BUFF

terge toate liniile din bufferul SQL

DELETE

DEL

terge linia curent

INPUT

Insereaz un numr nedefinit de linii

INPUT text

I text

Insereaz o linie constituit din text-ul respectiv

LIST

Listeaz toate liniile din buffer-ul SQL (ultimul bloc)

LIST n

Ln

Listeaz o linie specificat de n

LIST m,n

L m,n

Listeaz toate liniile dinte m i n

RUN

Afieaz i execut blocul curent din buffer

Execut blocul curent din buffer

03.10.2015

Laborator 1

22

Rularea blocurilor PL/SQL n SQL*Plus


Un bloc rmne n buffer pn la editarea
urmtorului bloc
Un bloc poate fi editat pe mai multe rnduri tastnd
ENTER la sfritul liniei curente i se poate executa
astfel:
a. Se copiaz blocul n editor (Copy/Paste) i se execut cu
/ sau RUN
b. Se execut tot scriptul (care poate s conin mai multe
blocuri) astfel:
SQL> @cale_fieier\nume_fisier.sql
SQL> start cale_fieier\nume_fisier.sql
03.10.2015

Laborator 1

23

Rularea blocurilor PL/SQL n SQL*Plus


n linia de comand se mai pot da urmtoarele comenzi:
SAVE cale_fiier\nume_fiier permite salvarea ntr-un fiier a
coninutului bufferului SQL
GET cale_fiier\nume_fiier ncarc coninutul unui fiier salvat n
prealabil n buffer
START cale_fiier\nume_fiier lansez n execuie comanda salvat n
fiier
RUN cale_fiier\nume_fiier lanseaz n execuie comanda salvat n
fiier
@cale_fiier\nume_fiier lanseaz n execuie comanda salvat n
fiier
EXIT ieire din SQL*Plus

03.10.2015

Laborator 1

24

Rularea blocurilor PL/SQL n SQL*Plus


Comand

Utilizare

set serveroutput on;

Permite afiarea n SQL*Plus

set lines n

Permite printarea a n caractere pe vertical

set pages n

Permite printarea a n coloane

03.10.2015

Laborator 1

25

Exemple
Pentru urmtoarele exerciii se va crea nc un
tabel numit mesaje:

03.10.2015

Laborator 1

26

Exemple
Ex. 5. n exemplul urmtor se prezint un bloc
PL/SQL care face o verificare a numrului de
angajai din anul 1992. Dac nu exist nicio
angajare, se va declana o excepie
no_data_found i se va insera n tabela
mesaje, mesajul numrul 1, iar dac sunt mai
muli angajai, se va declana excepia;
too_many_rows i se va insera mesajul
numrul 2.
03.10.2015

Laborator 1

27

Exemple

Pentru a vedea rezultatul procedurii se va face un select pe


tabela mesaje:
SQL> SELECT * FROM MESAJE;
03.10.2015

Laborator 1

28

Exemple
Ex. 6. n exemplul de mai jos se folosesc dou blocuri
imbricate care afieaz numele, data angajrii i comisionul
unui angajat introducnd id-ul angajatului i id-ul
departamentului de la tastatur.

03.10.2015

Laborator 1

29

Exemple

03.10.2015

Laborator 1

30

Exemple
Ex. 7. n urmtorul exerciiu vom edita un
fiier ex7.sql care conine un bloc PL/SQL.

03.10.2015

Laborator 1

31

Exemple

03.10.2015

Laborator 1

32

Exemple
Executarea fiierului:
SQL>@cale_fisier\ex7.sql
S se testeze pentru funcia ANALYST i
departamentele 20, 40, 50.

03.10.2015

Laborator 1

33

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