Sunteți pe pagina 1din 9

24.10.

2022

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


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

Agenda
1. Limbajul PL/SQL - exerciții recapitulative
SGBD Oracle 2. Limbajul PL/SQL - structuri de control

CURSUL 5

BUCUREŞTI
2022-2023

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

1
24.10.2022

EXERCIȚII PL/SQL

1. Creaţi un bloc PL/SQL ce selectează prețul de listă maxim pentru


LIMBAJUL PL/SQL produsele existente în tabela PRODUSE. Afișați rezultatul pe ecran.

RECAPITULARE – NOȚIUNI GENERALE

2
24.10.2022

EXERCIȚII PL/SQL EXERCIȚII PL/SQL


3. Creaţi un bloc PL/SQL ce adaugă un produs nou în tabela PRODUSE.
2. Creaţi un bloc PL/SQL care şterge un produs pe baza codului acestuia a)Folosiți maximul dintre codurile produselor și adăugaţi 10 la această
primit ca parametru (variabilă de substituţie). Anulaţi ştergerea. valoare, folosind-o drept valoare pentru codul produsului nou introdus.
b)Folosiţi un parametru (variabilă de substituţie) pentru denumire,
categoria şi prețul de listă al produsului.
c)Lăsaţi restul coloanelor NULL.
d)Executaţi blocul.

5 6

3
24.10.2022

Elemente de programare procedurală


Structuri fundamentale de control

LIMBAJUL PL/SQL
STRUCTURI FUNDAMENTALE DE CONTROL

4
24.10.2022

Elemente de programare procedurală Elemente de programare procedurală


Structuri fundamentale de control Structuri fundamentale de control
DECLARE
IF conditie_1 THEN nota number;
BEGIN
secventa_comenzi_1; IF nota<5 THEN
ELSE DBMS_OUTPUT.PUT_LINE('Nepromovat!');
secventa_comenzi_2; ELSE
DBMS_OUTPUT.PUT_LINE('Promovat!');
IF conditie_1 THEN END IF; END IF;
CASE [selector] DECLARE
secventa_comenzi_1; v_stoc produse.stoc%TYPE;
END; DECLARE
WHEN expresie_1 THEN / v_stoc produse.stoc%TYPE;
ELSIF conditie_2 THEN BEGIN
actiune_1; SELECT stoc INTO v_stoc FROM
BEGIN
secventa_comenzi_2; SELECT stoc INTO v_stoc FROM
WHEN expresie_2 THEN produse WHERE id_produs=10;
ELSIF conditie_3 THEN IF v_stoc < 500 THEN
produse WHERE id_produs=10;
secventa_comenzi_3; Structura actiune_2; v_stoc:=2* v_stoc; Structura CASE
WHEN v_stoc < 500
--------- alternativă -------- ELSIF v_stoc BETWEEN 500 AND
1000 THEN
alternativă THEN v_stoc:= v_stoc *2;
WHEN expresie_n THEN WHEN v_stoc BETWEEN 500 AND
ELSIF conditie_n THEN v_stoc:=1.5 * v_stoc;
actiune_n; ELSE
1000 THEN v_stoc:= v_stoc *1.5;
secventa_comenzi_n; ELSE v_stoc:= v_stoc *1.25;
[ELSE actiune_n+1]; v_stoc:=1.25* v_stoc;
ELSE END IF; DECLARE
END CASE;
END CASE; END;
secventa_comenzi_n+1; END; v_stoc produse.stoc%TYPE;
/
/ v_proc NUMBER(4,2);
END IF; BEGIN
variabila:= SELECT stoc INTO v_stoc FROM produse
CASE [selector] WHERE id_produs=10;
v_proc:=
WHEN expresie_1 THEN rezultat_1 CASE
WHEN expresie_2 THEN rezultat_2 WHEN v_stoc < 500 THEN 2
-------- WHEN v_stoc BETWEEN 500 AND 1000 THEN 1.5
ELSE 1.25
WHEN expresie_n THEN rezultat_n END;
[ELSE rezultat_n+1] v_stoc:= v_stoc *v_proc;
END;
END; /

9 10

5
24.10.2022

Elemente de programare procedurală Elemente de programare procedurală


Structuri fundamentale de control Structuri fundamentale de control
DECLARE
v_nr NUMBER(2):=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE
LOOP (v_nr);
secventa_comenzi; v_nr:=v_nr+1;
EXIT [WHEN conditie]; EXIT WHEN v_nr > 10;
END LOOP; END LOOP;
END;
/

DECLARE
WHILE conditie LOOP FOR n IN [REVERSE] v_nr NUMBER(2):=1; BEGIN
secventa_comenzi_1; min..max LOOP BEGIN FOR v_nr IN 1..10
secventa_comenzi_2; Structura repetitivă secventa_comenzi; WHILE v_nr <= 10 Structura repetitivă LOOP
EXIT [WHEN conditie]; EXIT [WHEN conditie]; LOOP DBMS_OUTPUT.PUT_LINE
END LOOP; END LOOP; DBMS_OUTPUT.PUT_LINE (v_nr);
(v_nr); END LOOP;
v_nr:=v_nr+1; END;
END LOOP; /
END;
/

11 12

6
24.10.2022

Tratarea valorilor NULL Tratarea valorilor NULL


❑ Comparaţiile simple care implică NULL sunt evaluate la NULL
❑ Aplicarea operatorului logic NOT unei valori NULL va conduce la NULL
❑ În cadrul structurilor de control, în cazul în care condiţiile sunt evaluate
la NULL, atunci secvenţa de comenzi asociată nu se execută
x := 5;
y := NULL;
...
IF x != y THEN -- returnează NULL
-- secvenţă de comenzi care nu se execută
END IF;
a := NULL;
b := NULL;
...
IF a = b THEN -- returnează NULL
-- secvenţă de comenzi care nu se execută
END IF;

13 14

7
24.10.2022

Rezolvaţi TEMĂ
Ce valoare primeşte variabila test în fiecare caz dintre următoarele: Construiți un bloc PL/SQL prin care să verificați dacă un an citit
de la tastatură este sau nu bisect.
test := a AND b;
Testați soluția cu următoarele valori:
a b test
1990 Nu este an bisect
TRUE TRUE ?
2000 An bisect
TRUE FALSE ?
1996 An bisect
NULL TRUE ?
1886 Nu este an bisect
NULL FALSE ? 1992 An bisect
1824 An bisect

15 16

8
24.10.2022

CURSUL 6...

Limbajul PL/SQL – gestiunea cursorilor...

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