Sunteți pe pagina 1din 5

18.11.

2022

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

SGBD Oracle
SUBPROGRAME ÎN PL/SQL
- PROCEDURI ȘI FUNCȚII -

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)


iuliana.botha@ie.ase.ro

BUCUREŞTI
2022-2023

Gestiunea subprogramelor
PROCEDURI FUNCŢII
Apelate direct prin nume Apelate ca parte a unei expresii

Nu conţin clauza RETURN în Trebuie să conţină clauza RETURN


antet în antet

Pot returna valori prin Trebuie să returneze o valoare


parametrii de ieşire
Pot conţine comanda RETURN Trebuie să conţină cel puţin o comandă
fără indicarea unei valori RETURN

1
18.11.2022

Subprograme în PL/SQL
Proceduri

Creare procedură:
CREATE [OR REPLACE] PROCEDURE nume_proc
[(param1 [IN | OUT | IN OUT] TIP_DATA1, ....) ]
-- tipul variabilelor este precizat fără dimensiune
(ex: NUMBER sau VARCHAR2)
IS | AS
-- zona de declarare a variabilelor utilizate
-- NU se utilizează DECLARE
BEGIN
----
[EXCEPTION]
------
END [nume_proc];

Subprograme în PL/SQL
Proceduri

Apeluri uzuale ale unei proceduri:

1.prin nume dintr-un bloc PL/SQL anonim sau din alt subprogram

2.prin apel direct utilizând:


EXECUTE nume_proc;
 comandă SQL Plus care include apelul într-un bloc PL/SQL anonim
(BEGIN...END;)

2
18.11.2022

Subprograme în PL/SQL
Proceduri

 Parametrii unei proceduri

IN transmite procedurii o valoare constantă


OUT transmite o valoare către mediul apelant
IN OUT transmite o valoare procedurii şi o altă valoare
mediului apelant prin acelaşi parametru

Gestiunea subprogramelor
Funcţii
Creare funcţie:

CREATE [OR REPLACE] FUNCTION nume_functie


[(param1 [IN | OUT | IN OUT] TIP_DATA1,....)]
RETURN TIP_DATA
-- tipul returnat prin functie, dar si tipul variabilelor vor
fi precizate fără dimensiune
(ex: NUMBER sau VARCHAR2)
IS | AS
-- zona de declarare a variabilelor utilizate în subprogram
-- NU se utilizează DECLARE
BEGIN
----
RETURN valoare;
[EXCEPTION]
------
END [nume_functie];
/

3
18.11.2022

Gestiunea subprogramelor
Funcţii

Apel funcţie:

1. într-un bloc PL/SQL anonim sau în alt subprogram


DECLARE v TIP_DATA;
BEGIN
v := nume_functie(param_actual); ...
END;

2. ca parametru al unui alt subprogram


EXECUTE DBMS_OUTPUT.PUT_LINE(nume_functie(param_actual));

3. într-o comandă SQL (nu întotdeauna)

EXERCIȚII
--1. Construiți procedura Valoare_comenzi care să calculeze și să afișeze valoarea fiecărei
comenzi încheiate într-un an indicat ca parametru de intrare. Apelați procedura.
--2. Construiți funcția Calcul_varsta_client care să returneze varsta clientului al cărui id este
dat ca parametru de intrare. Tratați cazul în care clientul indicat nu există.
--3. Apelați funcția Calcul_varsta_client în cadrul unei proceduri, Afisare_clienti, prin care se
vor parcurge toți clienții, în scopul afișării vârstei fiecăruia.
--4. Creaţi procedura Mareste_salariul prin care să se mărească cu o anumită valoare
salariul unui angajat. Valoarea cu care se face modificarea şi identificatorul angajatului vor fi
primite ca parametri.
Trataţi printr-o excepţie cazul în care nu există angajatul specificat (deci comanda de
actualizare nu va produce modificări).
--5. Creati functia Numar_ang care sa calculeze numarul de angajati din departamentul al
carui identificator este primit ca parametru.
Tratati prin exceptii cazul in care nu exista angajati in departamentul specificat, precum si pe
acela in care nu exista departamentul.

4
18.11.2022

TEMĂ
1. Să se creeze minim 3 funcții pe schema BD proprie
2. Să se creeze minim 3 proceduri pe schema BD proprie

* Comenzile se vor testa în SQL Developer

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