Advertisement
Guest User

Untitled

a guest
Apr 14th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --PROCEDURI
  2. --Sa se creasca stocul pentru cartea cu id-ul dat, cu o valoare data
  3. SET SERVEROUTPUT ON
  4. CREATE OR REPLACE PROCEDURE modif_stoc (id IN carte.id_carte%TYPE, val IN carte.stoc%TYPE)
  5. IS
  6. e EXCEPTION;
  7. BEGIN
  8. UPDATE carte SET stoc = stoc + val
  9. WHERE id_carte = id;
  10. IF SQL%ROWCOUNT = 0 THEN
  11. RAISE e;
  12. ELSE
  13. DBMS_OUTPUT.PUT_LINE('S-a modificat stocul pentru cartea cu id-ul '||id);
  14. END IF;
  15. EXCEPTION WHEN e THEN
  16. DBMS_OUTPUT.PUT_LINE('Nu exista cartea cu id-ul dat');
  17. END;
  18.  
  19. BEGIN
  20. modif_stoc(1,10);
  21. END;
  22.  
  23. SELECT * FROM carte WHERE id_carte = 1;
  24.  
  25. --Sa se afiseze numele si data nasterii pentru autorii cuprinsi intre 2 id-uri date. Se vor trata cazurile id1 < id2, id1 > id2 si id1 = id2
  26. CREATE OR REPLACE PROCEDURE afis_autori (id1 IN autor.id_autor%TYPE, id2 IN autor.id_autor%TYPE)
  27. IS
  28. nume_a autor.nume%TYPE;
  29. data_n autor.data_nasterii%TYPE;
  30. BEGIN
  31. IF id1 < id2 THEN
  32. FOR i IN id1..id2 LOOP
  33. SELECT nume,data_nasterii INTO nume_a,data_n FROM autor
  34. WHERE id_autor = i;
  35. DBMS_OUTPUT.PUT_LINE('Autorul cu numele '||nume_a||' s-a nascut pe data de '||data_n);
  36. END LOOP;
  37. ELSIF id1 > id2 THEN
  38. FOR i IN id2..id1 LOOP
  39. SELECT nume,data_nasterii INTO nume_a,data_n FROM autor
  40. WHERE id_autor = i;
  41. DBMS_OUTPUT.PUT_LINE('Autorul cu numele '||nume_a||' s-a nascut pe data de '||data_n);
  42. END LOOP;
  43. ELSIF id1 = id2 THEN
  44. SELECT nume,data_nasterii INTO nume_a,data_n FROM autor
  45. WHERE id_autor = id1;
  46. DBMS_OUTPUT.PUT_LINE('Autorul cu numele '||nume_a||' s-a nascut pe data de '||data_n);
  47. END IF;
  48. END;
  49.  
  50. BEGIN
  51. afis_autori(2,5);
  52. END;
  53.  
  54. BEGIN
  55. afis_autori(5,2);
  56. END;
  57.  
  58. BEGIN
  59. afis_autori(2,2);
  60. END;
  61.  
  62. --Sa se afiseze pentru toate cartile numelea acestora, ISBN-urile si data publicarii
  63. CREATE OR REPLACE PROCEDURE afis_carti
  64. IS
  65. CURSOR c IS SELECT titlu,ISBN,data_aparitie FROM carte
  66. ORDER BY id_carte;
  67. nume_carte carte.titlu%TYPE;
  68. ISBN_carte carte.ISBN%TYPE;
  69. data_ap carte.data_aparitie%TYPE;
  70. nr_carti carte.id_carte%TYPE;
  71. BEGIN
  72. SELECT COUNT(id_carte) INTO nr_carti FROM carte;
  73. OPEN c;
  74. FOR i IN 1..nr_carti LOOP
  75. FETCH c INTO nume_carte,ISBN_carte,data_ap;
  76. DBMS_OUTPUT.PUT_LINE('Cartea cu numele '||nume_carte||' are ISBN-ul '||ISBN_carte||' si a fost publicata la data de '||data_ap);
  77. END LOOP;
  78. CLOSE c;
  79. END;
  80.  
  81. BEGIN
  82. afis_carti;
  83. END;
  84.  
  85. --FUNCTII
  86. --Sa se afiseze orasul pentru clientul cu CNP-ul dat
  87. CREATE OR REPLACE FUNCTION afiseaza_oras(CNP_client client.CNP%TYPE)
  88. RETURN VARCHAR2 IS
  89. oras_client client.oras%TYPE := NULL;
  90. BEGIN
  91. SELECT oras INTO oras_client FROM client
  92. WHERE CNP = CNP_client;
  93. RETURN oras_client;
  94. END;
  95.  
  96. SELECT * FROM client WHERE id_client = 1;
  97.  
  98. EXECUTE DBMS_OUTPUT.PUT_LINE(afiseaza_oras('2950717063300'));
  99.  
  100. --Sa se afiseze cea mai veche carte din categoria data
  101. CREATE OR REPLACE FUNCTION afiseaza_carte_cat(nume_cat categorie.nume%TYPE)
  102. RETURN VARCHAR2 IS
  103. nume_carte carte.titlu%TYPE := NULL;
  104. BEGIN
  105. WHILE SQL%ROWCOUNT < 2 LOOP
  106. SELECT titlu INTO nume_carte FROM carte
  107. WHERE id_categorie = (SELECT id_categorie FROM categorie WHERE nume = nume_cat)
  108. ORDER BY data_aparitie;
  109. END LOOP;
  110. RETURN nume_carte;
  111. END;
  112.  
  113. EXECUTE DBMS_OUTPUT.PUT_LINE(afiseaza_carte_cat('Nuvela'));
  114.  
  115. --Sa se afiseze numele, adresa si orasul pentru editura cu id-ul dat
  116. CREATE OR REPLACE FUNCTION info_editura(id IN editura.id_editura%TYPE)
  117. RETURN editura%ROWTYPE IS
  118. record_editura editura%ROWTYPE;
  119. BEGIN
  120. SELECT * INTO record_editura FROM editura
  121. WHERE id_editura = id;
  122. RETURN record_editura;
  123. EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR (-20000, 'Editura cu id-ul '||id||' nu exista');
  124. END;
  125.  
  126. DECLARE
  127. editura_t editura%ROWTYPE;
  128. BEGIN
  129. editura_t := info_editura(2);
  130. DBMS_OUTPUT.PUT_LINE('Editura cu numele '||editura_t.nume||' are adresa '||editura_t.adresa||' si este in orasul '||editura_t.oras);
  131. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement