Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --PROCEDURI
- --Sa se creasca stocul pentru cartea cu id-ul dat, cu o valoare data
- SET SERVEROUTPUT ON
- CREATE OR REPLACE PROCEDURE modif_stoc (id IN carte.id_carte%TYPE, val IN carte.stoc%TYPE)
- IS
- e EXCEPTION;
- BEGIN
- UPDATE carte SET stoc = stoc + val
- WHERE id_carte = id;
- IF SQL%ROWCOUNT = 0 THEN
- RAISE e;
- ELSE
- DBMS_OUTPUT.PUT_LINE('S-a modificat stocul pentru cartea cu id-ul '||id);
- END IF;
- EXCEPTION WHEN e THEN
- DBMS_OUTPUT.PUT_LINE('Nu exista cartea cu id-ul dat');
- END;
- BEGIN
- modif_stoc(1,10);
- END;
- SELECT * FROM carte WHERE id_carte = 1;
- --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
- CREATE OR REPLACE PROCEDURE afis_autori (id1 IN autor.id_autor%TYPE, id2 IN autor.id_autor%TYPE)
- IS
- nume_a autor.nume%TYPE;
- data_n autor.data_nasterii%TYPE;
- BEGIN
- IF id1 < id2 THEN
- FOR i IN id1..id2 LOOP
- SELECT nume,data_nasterii INTO nume_a,data_n FROM autor
- WHERE id_autor = i;
- DBMS_OUTPUT.PUT_LINE('Autorul cu numele '||nume_a||' s-a nascut pe data de '||data_n);
- END LOOP;
- ELSIF id1 > id2 THEN
- FOR i IN id2..id1 LOOP
- SELECT nume,data_nasterii INTO nume_a,data_n FROM autor
- WHERE id_autor = i;
- DBMS_OUTPUT.PUT_LINE('Autorul cu numele '||nume_a||' s-a nascut pe data de '||data_n);
- END LOOP;
- ELSIF id1 = id2 THEN
- SELECT nume,data_nasterii INTO nume_a,data_n FROM autor
- WHERE id_autor = id1;
- DBMS_OUTPUT.PUT_LINE('Autorul cu numele '||nume_a||' s-a nascut pe data de '||data_n);
- END IF;
- END;
- BEGIN
- afis_autori(2,5);
- END;
- BEGIN
- afis_autori(5,2);
- END;
- BEGIN
- afis_autori(2,2);
- END;
- --Sa se afiseze pentru toate cartile numelea acestora, ISBN-urile si data publicarii
- CREATE OR REPLACE PROCEDURE afis_carti
- IS
- CURSOR c IS SELECT titlu,ISBN,data_aparitie FROM carte
- ORDER BY id_carte;
- nume_carte carte.titlu%TYPE;
- ISBN_carte carte.ISBN%TYPE;
- data_ap carte.data_aparitie%TYPE;
- nr_carti carte.id_carte%TYPE;
- BEGIN
- SELECT COUNT(id_carte) INTO nr_carti FROM carte;
- OPEN c;
- FOR i IN 1..nr_carti LOOP
- FETCH c INTO nume_carte,ISBN_carte,data_ap;
- DBMS_OUTPUT.PUT_LINE('Cartea cu numele '||nume_carte||' are ISBN-ul '||ISBN_carte||' si a fost publicata la data de '||data_ap);
- END LOOP;
- CLOSE c;
- END;
- BEGIN
- afis_carti;
- END;
- --FUNCTII
- --Sa se afiseze orasul pentru clientul cu CNP-ul dat
- CREATE OR REPLACE FUNCTION afiseaza_oras(CNP_client client.CNP%TYPE)
- RETURN VARCHAR2 IS
- oras_client client.oras%TYPE := NULL;
- BEGIN
- SELECT oras INTO oras_client FROM client
- WHERE CNP = CNP_client;
- RETURN oras_client;
- END;
- SELECT * FROM client WHERE id_client = 1;
- EXECUTE DBMS_OUTPUT.PUT_LINE(afiseaza_oras('2950717063300'));
- --Sa se afiseze cea mai veche carte din categoria data
- CREATE OR REPLACE FUNCTION afiseaza_carte_cat(nume_cat categorie.nume%TYPE)
- RETURN VARCHAR2 IS
- nume_carte carte.titlu%TYPE := NULL;
- BEGIN
- WHILE SQL%ROWCOUNT < 2 LOOP
- SELECT titlu INTO nume_carte FROM carte
- WHERE id_categorie = (SELECT id_categorie FROM categorie WHERE nume = nume_cat)
- ORDER BY data_aparitie;
- END LOOP;
- RETURN nume_carte;
- END;
- EXECUTE DBMS_OUTPUT.PUT_LINE(afiseaza_carte_cat('Nuvela'));
- --Sa se afiseze numele, adresa si orasul pentru editura cu id-ul dat
- CREATE OR REPLACE FUNCTION info_editura(id IN editura.id_editura%TYPE)
- RETURN editura%ROWTYPE IS
- record_editura editura%ROWTYPE;
- BEGIN
- SELECT * INTO record_editura FROM editura
- WHERE id_editura = id;
- RETURN record_editura;
- EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR (-20000, 'Editura cu id-ul '||id||' nu exista');
- END;
- DECLARE
- editura_t editura%ROWTYPE;
- BEGIN
- editura_t := info_editura(2);
- DBMS_OUTPUT.PUT_LINE('Editura cu numele '||editura_t.nume||' are adresa '||editura_t.adresa||' si este in orasul '||editura_t.oras);
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement