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)
[email protected] 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