Advertisement
Guest User

temaSQL

a guest
Oct 19th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROD [ codp , den , culoare , stoc , pret ]
  2. CLIENT [ codcli , nume , loc ]
  3. VANZARE [ codp , codcli , cant , datav ]
  4.  
  5. E
  6. Creaţi un bloc PL/SQL care:
  7. 1. citeşte două valori introduse la tastatură reprezentând codul unui client (corespunzator
  8. tabelei CLIENT) şi codul unui produs (corespunzator tabelei PROD),
  9. 2. afişează cantitatea din acel produs cumparat de acel client
  10. 3. scrieţi codul PL/SQL care să permită generarea fiecăreia din excepţiile următoare :
  11. NO_DATA_FOUND
  12. TOO_MANY_ROWS
  13. INVALID_NUMBER
  14. precum şi ultima alternativă, pentru toate celelalte erori.
  15. Prin execuţii repetate, cu diferite valori, faceţi să se declanşeze secvenţele de tratare a
  16. excepţiilor.
  17.  
  18. DECLARE
  19.     v_cod_client client.codcli%TYPE :=&client;
  20.     v_cod_produs prod.codp%TYPE :=&produs;
  21.     v_cantitate vanzare.cant%TYPE;
  22. BEGIN
  23.     SELECT cant INTO v_cantitate FROM vanzare WHERE codcli = v_cod_client AND codp = v_cod_produs;
  24. EXCEPTION
  25.     WHEN NO_DATA_FOUND THEN
  26.         dbms_output.put_line('Produsul nu a fost cumparat de acest client!');
  27.     WHEN TOO_MANY_ROWS THEN
  28.         dbms_output.put_line('Clientul a cumparat de mai multe ori produsul respectiv!');
  29.     WHEN INVALID_NUMBER THEN
  30.         dbms_output.put_line('Verificati datele introduse!');
  31.     WHEN OTHERS THEN   
  32.         dbms_output.put_line('A aparut o eroare!');
  33. END;
  34. G
  35. Creaţi un bloc PL/SQL pentru modificarea unui pret pentru un produs (indicat prin
  36. denumire). Controlaţi că noul pret nu este superior celui vechi; dacă da, atunci declanşaţi o
  37. excepţie.
  38. În acelaşi timp, prevedeţi secvenţe pentru tratarea altor excepţii: produsul nu exista
  39. (NO_DATA_FOUND), există mai multe produse cu aceeaşi denumire
  40. (TOO_MANY_ROWS).
  41.  
  42. DECLARE
  43.     v_den_prod prod.den%TYPE := &denumire_produs;
  44.     v_pret_nou prod.pret%TYPE := &pret;
  45.     v_pret prod.pret%TYPE;
  46.     pret_invalid EXCEPTION;
  47. BEGIN
  48.     SELECT pret INTO v_pret FROM prod WHERE den = v_den_prod;
  49.     IF(v_pret_nou > v_pret) THEN
  50.         RAISE pret_invalid;
  51.     END IF;
  52.     UPDATE prod SET pret = v_pret_nou WHERE den = v_den_prod;
  53. EXCEPTION  
  54.     WHEN pret_invalid THEN
  55.         dbms_output.put_line('Pretul introdus este mai mare decat pretul produsului!');
  56.     WHEN NO_DATA_FOUND THEN
  57.         dbms_output.put_line('Produsul solicitat nu exista!');
  58.     WHEN TOO_MANY_ROWS THEN
  59.         dbms_output.put_line('Exista mai multe preoduse cu aceasta denumire!');
  60.     WHEN OTHERS THEN   
  61.         dbms_output.put_line('A aparut o eroare!');
  62. END;
  63.  
  64. H
  65. Creaţi o tabelă, MESSAGE, cu o singură coloană, de tip text.
  66. Craţi un bloc PL/SQL care citeşte o valoare de la tastatură, reprezentând un salariu, şi apoi
  67. caută în tabela emp, angajaţii cu acel salariu.
  68. 1. dacă sunt returnate mai multe linii, să se înscrie în tabela MESSAGE textul prea mulţi
  69. angajaţi cu salariul ….
  70. 2. dacă nu este returnată nicio linie, lorsque aucune ligne n'est retournée, să se înscrie în
  71. tabela MESSAGE textul niciun angajat cu salariul ….
  72. 3. la apariţia unei alte erori, să se înscrie în tabela MESSAGE textul altă eroare este
  73. prezentă; eroarea numărul …. care indică …..
  74. Verificaţi prin execuţii succesive, cu diferite valori.
  75.  
  76. create table MESSAGE (
  77. comentariu Varchar2(500)
  78. )
  79.  
  80. DECLARE
  81.     v_sal emp.sal%type:=&sal;
  82.     v_empno emp.empno%type;
  83.     err_code NUMBER;
  84.     err_message VARCHAR2(50);
  85. BEGIN
  86.     select empno into v_empno from emp where sal = v_sal;
  87.     insert into MESSAGE values('angajatul '||v_empno||' are salariul '||v_sal);
  88. EXCEPTION
  89.     WHEN NO_DATA_FOUND THEN
  90.         insert into MESSAGE values('niciun angajat cu salariul '||v_sal);
  91.     WHEN TOO_MANY_ROWS THEN
  92.         insert into MESSAGE values('prea mulţi angajaţi cu salariul '||v_sal);
  93.     WHEN OTHERS THEN
  94.         err_code = SQLCODE;
  95.         err_message = SQLERRM;
  96.         insert into MESSAGE values('altă eroare este prezentă; eroarea numărul'|| err_code|| ' care indică '||err_message);
  97. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement