Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis conceptes fundamentals UF3: PL-SQL»
Línia 30: | Línia 30: | ||
b) En un bloc PL/SQL crea un cursor que recuperi tots els empleats ordenats per departament i recorre'l per omplir la taula CAPS convenientment. | b) En un bloc PL/SQL crea un cursor que recuperi tots els empleats ordenats per departament i recorre'l per omplir la taula CAPS convenientment. | ||
+ | <!-- | ||
+ | DECLARE | ||
+ | v_dept_id EMPLOYEES.DEPARTMENT_ID%TYPE := -1; | ||
+ | v_manager_id EMPLOYEES.MANAGER_ID%TYPE; | ||
+ | CURSOR c_emp_cursor IS | ||
+ | SELECT first_name, last_name, department_id | ||
+ | FROM employees | ||
+ | ORDER BY department_id; | ||
+ | v_emp_record CURSOR%ROWTYPE; | ||
+ | BEGIN | ||
+ | OPEN c_emp_cursor; | ||
+ | LOOP | ||
+ | FETCH c_emp_cursor INTO v_emp_record; | ||
+ | EXIT WHEN c_emp_cursor%NOTFOUND; | ||
+ | IF v_emp_record.department_id <> v_dept_id THEN | ||
+ | v_manager_id := CAP(emp_record.department_id); | ||
+ | SELECT department_name INTO v_nom_dept | ||
+ | FROM DEPARTMENTS | ||
+ | WHERE department_id = emp_record.department_id; | ||
+ | v_dept_id := emp_record.department_id; | ||
+ | ELSE | ||
+ | LOOP | ||
+ | FETCH c_emp_cursor INTO v_emp_record; | ||
+ | EXIT WHEN c_emp_cursor%NOTFOUND; | ||
+ | |||
+ | INSERT INTO CAPS | ||
+ | VALUES (v_nom_dept, v_firs_name, v_last_name, v_num_empleats); | ||
+ | END IF; | ||
+ | |||
+ | |||
+ | |||
+ | END LOOP; | ||
+ | END; | ||
+ | / | ||
+ | |||
+ | --> | ||
+ | |||
+ | |||
+ | |||
2.- Fes un bloc PL/SQL que crei una taula indexada per job_title i crea un cursor que recuperi tots els empleats ordenats per departament i recorre'l per omplir la taula amb la següent informació: número d'empleats que tenen aquest ofici i el número de departaments que tenen aquest ofici. Mostra el resultat. | 2.- Fes un bloc PL/SQL que crei una taula indexada per job_title i crea un cursor que recuperi tots els empleats ordenats per departament i recorre'l per omplir la taula amb la següent informació: número d'empleats que tenen aquest ofici i el número de departaments que tenen aquest ofici. Mostra el resultat. |
Revisió del 21:57, 18 març 2019
Esquema HR
1.- Crea una taula CAPS (CREATE TABLE) que contingui els següent camps: Nom_Department, First_Name, Last_Name i Num_empleats.
CREATE TABLE CAPS( Nom_Department VARCHAR2(30) PRIMARY KEY, First_Name VARCHAR2(20), Last_Name VARCHAR2(250), Num_empleats NUMBER(3));
a) Crea una funció que a partir d'un número de departament ens retorni el manager_id. En cas de que no existeixi el número de departament utilitza el procediment RAISE_APPLICATION_ERROR per generar una excepció amb el codi: -20215 i missatge: 'No existeix aquest departament!!'.
b) En un bloc PL/SQL crea un cursor que recuperi tots els empleats ordenats per departament i recorre'l per omplir la taula CAPS convenientment.
2.- Fes un bloc PL/SQL que crei una taula indexada per job_title i crea un cursor que recuperi tots els empleats ordenats per departament i recorre'l per omplir la taula amb la següent informació: número d'empleats que tenen aquest ofici i el número de departaments que tenen aquest ofici. Mostra el resultat.
3.- Utilitzant dos cursors, un que recuperi els departaments i un segon parametritzat que a partir d'un department_id recupera els empleats, fes el següent informe:
- EMPLEATS PER DEPARTAMENT - Departament: <nom del departament> Cap: <nom i cognom del cap del departament> Empleats <nom i cognom dels empleats> - - - - - - - - - - - - - - - - - - - - Departament: <nom del departament> Cap: <nom i cognom del cap del departament> Empleats <nom i cognom dels empleats>
Esquema SCOTT ampliat