Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROD [ codp , den , culoare , stoc , pret ]
- CLIENT [ codcli , nume , loc ]
- VANZARE [ codp , codcli , cant , datav ]
- E
- Creaţi un bloc PL/SQL care:
- 1. citeşte două valori introduse la tastatură reprezentând codul unui client (corespunzator
- tabelei CLIENT) şi codul unui produs (corespunzator tabelei PROD),
- 2. afişează cantitatea din acel produs cumparat de acel client
- 3. scrieţi codul PL/SQL care să permită generarea fiecăreia din excepţiile următoare :
- NO_DATA_FOUND
- TOO_MANY_ROWS
- INVALID_NUMBER
- precum şi ultima alternativă, pentru toate celelalte erori.
- Prin execuţii repetate, cu diferite valori, faceţi să se declanşeze secvenţele de tratare a
- excepţiilor.
- DECLARE
- v_cod_client client.codcli%TYPE :=&client;
- v_cod_produs prod.codp%TYPE :=&produs;
- v_cantitate vanzare.cant%TYPE;
- BEGIN
- SELECT cant INTO v_cantitate FROM vanzare WHERE codcli = v_cod_client AND codp = v_cod_produs;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- dbms_output.put_line('Produsul nu a fost cumparat de acest client!');
- WHEN TOO_MANY_ROWS THEN
- dbms_output.put_line('Clientul a cumparat de mai multe ori produsul respectiv!');
- WHEN INVALID_NUMBER THEN
- dbms_output.put_line('Verificati datele introduse!');
- WHEN OTHERS THEN
- dbms_output.put_line('A aparut o eroare!');
- END;
- G
- Creaţi un bloc PL/SQL pentru modificarea unui pret pentru un produs (indicat prin
- denumire). Controlaţi că noul pret nu este superior celui vechi; dacă da, atunci declanşaţi o
- excepţie.
- În acelaşi timp, prevedeţi secvenţe pentru tratarea altor excepţii: produsul nu exista
- (NO_DATA_FOUND), există mai multe produse cu aceeaşi denumire
- (TOO_MANY_ROWS).
- DECLARE
- v_den_prod prod.den%TYPE := &denumire_produs;
- v_pret_nou prod.pret%TYPE := &pret;
- v_pret prod.pret%TYPE;
- pret_invalid EXCEPTION;
- BEGIN
- SELECT pret INTO v_pret FROM prod WHERE den = v_den_prod;
- IF(v_pret_nou > v_pret) THEN
- RAISE pret_invalid;
- END IF;
- UPDATE prod SET pret = v_pret_nou WHERE den = v_den_prod;
- EXCEPTION
- WHEN pret_invalid THEN
- dbms_output.put_line('Pretul introdus este mai mare decat pretul produsului!');
- WHEN NO_DATA_FOUND THEN
- dbms_output.put_line('Produsul solicitat nu exista!');
- WHEN TOO_MANY_ROWS THEN
- dbms_output.put_line('Exista mai multe preoduse cu aceasta denumire!');
- WHEN OTHERS THEN
- dbms_output.put_line('A aparut o eroare!');
- END;
- H
- Creaţi o tabelă, MESSAGE, cu o singură coloană, de tip text.
- Craţi un bloc PL/SQL care citeşte o valoare de la tastatură, reprezentând un salariu, şi apoi
- caută în tabela emp, angajaţii cu acel salariu.
- 1. dacă sunt returnate mai multe linii, să se înscrie în tabela MESSAGE textul prea mulţi
- angajaţi cu salariul ….
- 2. dacă nu este returnată nicio linie, lorsque aucune ligne n'est retournée, să se înscrie în
- tabela MESSAGE textul niciun angajat cu salariul ….
- 3. la apariţia unei alte erori, să se înscrie în tabela MESSAGE textul altă eroare este
- prezentă; eroarea numărul …. care indică …..
- Verificaţi prin execuţii succesive, cu diferite valori.
- create table MESSAGE (
- comentariu Varchar2(500)
- )
- DECLARE
- v_sal emp.sal%type:=&sal;
- v_empno emp.empno%type;
- err_code NUMBER;
- err_message VARCHAR2(50);
- BEGIN
- select empno into v_empno from emp where sal = v_sal;
- insert into MESSAGE values('angajatul '||v_empno||' are salariul '||v_sal);
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- insert into MESSAGE values('niciun angajat cu salariul '||v_sal);
- WHEN TOO_MANY_ROWS THEN
- insert into MESSAGE values('prea mulţi angajaţi cu salariul '||v_sal);
- WHEN OTHERS THEN
- err_code = SQLCODE;
- err_message = SQLERRM;
- insert into MESSAGE values('altă eroare este prezentă; eroarea numărul'|| err_code|| ' care indică '||err_message);
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement