M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T11
T11- Creació de procediments
- Exercici 1
a) Crea un procediment anomenat ADD_PROD per insertar un producte nou a la taula PRODUCT
- CREATE OR REPLACE PROCEDURE add_prod
- (v_prodid IN product.prodid%TYPE,
- v_descrip IN product.descrip%TYPE)
- IS
- BEGIN
- INSERT INTO product (prodid, descrip)
- VALUES (v_prodid, v_descrip);
- COMMIT;
- END add_prod;
- /
b) Compila el codi, cridar al procediment i consulta la taula PRODUCT per veure els resultats.
- SQL> START p11q1.sql
- SQL> EXECUTE add_prod(999, 'SP TENNIS BALLS')
c) Crida de nou el procediment, passat l'identificador de producte 100860 ¿què passa i per què?
- SQL> EXECUTE add_prod(100860, 'SP ADULT TENNIS RACKET')
- Exercici 2
a) Crea un procediment anomenat UPD_PROD per actualitzar la descripció d'un producte de la taula PRODUCT. Inclou la manipulació d'excepcions necessària.
- CREATE OR REPLACE PROCEDURE upd_prod
- (v_prodid IN product.prodid%TYPE,
- v_descrip IN product.descrip%TYPE)
- IS
- BEGIN
- UPDATE product
- SET descrip = v_descrip
- WHERE prodid = v_prodid;
- IF SQL%NOTFOUND THEN
- RAISE_APPLICATION_ERROR(-20202,'Cap producte actualitzat.');
- END IF;
- END upd_prod;
- /
b) Compila el codi, crida al procediment i consulta la taula PRODUCT per veure els resultats. Comprova el control d'excepcions, intentant modificar un producte que no existeix.
- SQL> START p11q2.sql
- SQL> EXECUTE upd_prod(9999, 'SP TENNIS NETS')
- Exercici 3
a) Crea un procediment anomenat DEL_PROD per esborrar un producte de la taula PRODUCT. Inclou la manipulació d'excepcions necessària.
- CREATE OR REPLACE PROCEDURE del_prod
- (v_prodid IN product.prodid%TYPE)
- IS
- BEGIN
- DELETE FROM product
- WHERE prodid = v_prodid;
- IF SQL%NOTFOUND THEN
- RAISE_APPLICATION_ERROR(-20203,'Cap producte eliminat.');
- END IF;
- END del_prod;
- /
b) Compila el codi, crida al procediment i consulta la taula PRODUCT per veure els resultats. Verifica també el control d'excepcions intentant esborrar un producte que no existeix.
- SQL> START p11q3.sql
- SQL> EXECUTE del_prod(9999)
- Exercici 4
a) Crea un procediment que a partir del codi d'un empleat (empno), recuperi de la taula EMP el seu salari i ofici.
- CREATE OR REPLACE PROCEDURE query_emp
- (v_empno IN emp.empno%TYPE,
- v_sal OUT emp.sal%TYPE,
- v_job OUT emp.job%TYPE)
- IS
- BEGIN
- SELECT sal, job
- INTO v_sal, v_job
- FROM emp
- WHERE empno = v_empno;
- END query_emp;
- /
b) Compila el codi, crida al procediment i visualitza el salari i l'ofici per a l'empleat amb codi 7839·
- SQL> START p10q4.sql
- SQL> VARIABLE g_sal NUMBER
- SQL> VARIABLE g_job VARCHAR2(15)
- SQL> EXECUTE query_emp (7839, :g_sal, :g_job)
- SQL> PRINT g_sal
- G_SAL
- -----------
- 5000
- SQL> PRINT g_job
- G_JOB
- --------------------
- PRESIDENT
c) Crida una altra vegada al procediment passant ara el número de empleat 9898. Què passa? Per què?
- SQL> EXECUTE query_emp (9898, :g_sal, :g_job)
Error que empieza en la línea 5 del comando: EXECUTE query_emp (9898, :g_sal, :g_job) Informe de error: ORA-01403: No se ha encontrado ningún dato ORA-06512: en "SCOTT.QUERY_EMP", línea 9 ORA-06512: en línea 1 01403. 00000 - "no data found"
- Cause:
- Action: