Sunteți pe pagina 1din 3

EXERCITII PROPUSE – VARIABILE, STRUCTURI, CURSOR IMPLICIT

A.
1. Afişaţi numele şi telefonul aferente fiecărui client cu id-ul număr par.
set serveroutput on
Declare

CURSOR c is SELECT NUME_CLIENT,TELEFON FROM CLIENTI WHERE


MOD(ID_CLIENT,2)=0;

Begin
for r in c loop
if r.telefon is NULL
then
dbms_output.put_line('Clientul nu are nr ');
end if;
dbms_output.put_line(r.nume_client|| ' ' || r.telefon);
end loop;
end;
/

2. Creaţi un bloc PL/SQL care să afişeze codul şi denumirea pentru departamentul din
localitatea al cărei cod (id_produs) este precizat (fie citit de la tastatură, fie dat drept
valoare iniţială unei variabile locale).

set serveroutput on
DECLARE
v_id_locatie DEPARTAMENTE.id_locatie%type:=1700;

CURSOR c is SELECT ID_DEPARTAMENT, DENUMIRE_DEPARTAMENT from


DEPARTAMENTE WHERE ID_LOCATIE=V_ID_LOCATIE;
Begin
for r in c loop
dbms_output.put_line('Codul : ' || r.id_departament || ' denumire: '||
r.denumire_departament );
end loop;

end;
/

3. Să se afiseze numarul de salariati care au fost angajati inainte de o data (an)


precizata de utilizator printr-o variabila de substitutie (spre exemplu inanite de 1997).
DECLARE
v_nrSal NUMBER;
v_an number(4):=&v_an;

Begin
SELECT COUNT(*) into v_nrSal FROM ANGAJATI where EXTRACT(year from
data_angajare)=v_an ;
dbms_output.put_line('Nr de angajati im anul '|| v_an || ' sunt ' || v_nrsal);
end;
/

4. Sa se afiseze numele, salariul si venitul anual (salariul*12+comision*salariul*12)


angajatii cu id-ul cuprins intre 150 si 170. Modificati blocul de mai sus si afisati
doar angajatii care au salariul mai mare decat media (se foloseste o variabila in care
se va incarca salariul mediu).

DECLARE
CURSOR c is select nume, salariul, salariul*12+comision*salariul*12 as venit from
angajati where id_angajat between 150 and 170;
Begin

for r in c loop
dbms_output.put_line('Nume: ' || r.nume || ' salariul : '||r.salariul || ' venitul : '||r.venit);
end loop;
end;
/

B. Creati tabela PRODUSE2 astfel:

CREATE TABLE PRODUSE2 AS SELECT * FROM PRODUSE:

Realizati urmatoarele blocuri PLSQL:

1. Creaţi un bloc PL/SQL ce adaugă un produs nou in tabela PRODUSE2.


a. Folosiţi maximul dintre codurile produselor si adăugaţi 10 la aceasta valoare, folosind-
o ca valoare pentru codul produsului nou introdus.
b. Folosiţi variabile de substituţie pentru denumirea produsului si pretul de lista.
c. Lăsaţi descrierea produsului NULL.
d. Finalizati tranzactia de mai sus (COMMIT).
2. Creaţi un bloc PL/SQL ce selectează pretul de lista maxim pentru produsele existente
in tabela PRODUSE2. Tipăriţi rezultatul pe ecran.
3. Creaţi un bloc PL/SQL care şterge din tabela PRODUSE2 produsele care au pretul de
lista mai mare decat o valoare primita ca parametru (variabila de substituţie). Afisati
numarul de prosude sterse (SQL%ROWCOUNT). Anulati stergerea (ROLLBACK).
4. Creaţi un bloc PL/SQL prin care să se dubleze preţul (pret_lista) pentru produsele din
categoriile hardware2 şi hardware3. În cazul în care actualizarea se realizează cu succes,
afişaţi numărul de înregistrări modificate.
5. Creaţi un bloc PL/SQL prin care se dublează preţul produsului (pret_lista) al cărui cod
este 3169. În cazul în care acesta nu există (comanda UPDATE nu realizează nicio
modificare, vezi SQL%NOTFOUND) se va afisa un mesaj.

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