Documente Academic
Documente Profesional
Documente Cultură
prea_multe EXCEPTION;
PRAGMA EXCEPTION_INIT(prea_multe, -01422);
BEGIN
SELECT id_comanda, data
INTO v_id, v_data
FROM comenzi
WHERE EXTRACT(YEAR FROM data) = v_an;
IF SQL%NOTFOUND THEN
RAISE nu_exista_produsul;
ELSE
DBMS_OUTPUT.PUT_LINE('S-a produs update-ul');
END IF;
EXCEPTION
WHEN nu_exista_produsul THEN
DBMS_OUTPUT.PUT_LINE('Nu exista produsul');
END;
3. Într-un bloc PL/SQL citiți de la tastatură identificatorul unui produs. Afișați
denumirea produsului care are acel cod. De asemenea, calculați cantitatea totală
comandată din acel produs.
DECLARE
v_prod_id produse.id_produs%TYPE := &id;
v_denumire produse.denumire_produs%TYPE;
v_cantitate NUMBER;
produs_necomandat EXCEPTION;
BEGIN
SELECT denumire_produs
INTO v_denumire
FROM produse
WHERE id_produs = v_prod_id;
SELECT NVL(SUM(cantitate), 0)
INTO v_cantitate
FROM rand_comenzi
WHERE id_produs = v_prod_id;
IF v_cantitate = 0 THEN
RAISE produs_necomandat;
ELSE
DBMS_OUTPUT.PUT_LINE('Cantitate ' || v_cantitate);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Produsul nu exista');
WHEN produs_necomandat THEN
DBMS_OUTPUT.PUT_LINE('Produsul nu a fost comandat');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
4. Într-un bloc PL/SQL utilizați un cursor parametrizat pentru a prelua numele,
salariul și vechimea angajaților dintr-un departament furnizat drept
parametru.
DECLARE
v_id departamente.id_departament%TYPE := &id;
v_counter NUMBER;
CURSOR c_angajat (id_param angajati.id_departament%TYPE) IS (
SELECT nume, salariul, ROUND((SYSDATE - data_angajare) / 365, 2)
FROM angajati
WHERE id_departament = id_param
);
v_cursor c_angajat%ROWTYPE;
nu_exista_dep EXCEPTION;
nu_are_angajati EXCEPTION;
BEGIN
BEGIN
SELECT COUNT(id_departament) INTO v_counter
FROM departamente
WHERE id_departament = v_id;
IF v_counter = 1 THEN
OPEN c_angajat(v_id);
LOOP
FETCH c_angajat INTO v_cursor;
EXIT WHEN c_angajat%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Angajat ' || v_cursor.nume);
END LOOP;
IF c_angajat%ROWCOUNT = 0 THEN
RAISE nu_are_angajati;
END IF;
EXCEPTION
WHEN nu_exista_dep THEN
DBMS_OUTPUT.PUT_LINE('Nu exista departamentul');
WHEN nu_are_angajati THEN
DBMS_OUTPUT.PUT_LINE('Nu exista angajati in departamentul
specificat');
END;