Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis conceptes fundamentals UF3: PL-SQL»
Línia 1: | Línia 1: | ||
'''Esquema HR''' | '''Esquema HR''' | ||
− | 1.- Crea una taula | + | 1.- Crea una taula PRESSUPOST (CREATE TABLE) que contingui els següent camps: Nom_Department, First_Name, Last_Name del manager i Total_Salaris. |
<pre> | <pre> | ||
− | CREATE TABLE | + | CREATE TABLE PRESSUPOST( |
Nom_Department VARCHAR2(30) PRIMARY KEY, | Nom_Department VARCHAR2(30) PRIMARY KEY, | ||
First_Name VARCHAR2(20), | First_Name VARCHAR2(20), | ||
Last_Name VARCHAR2(250), | Last_Name VARCHAR2(250), | ||
− | + | Total_Salaris NUMBER(5)); | |
</pre> | </pre> | ||
− | a) Crea una funció que a partir d'un número de departament ens retorni el | + | a) Crea una funció que a partir d'un número de departament ens retorni el total de salaris pressupostats per a aquell departament, tenint en compte els següents augments: |
+ | <pre> | ||
+ | 3%: AD_ASST, SA_REP, SH_CLERK, PU_CLERK, ST_CLERK | ||
+ | 5%: AC_ACCOUNT, FI_ACCOUNT, HR_REP, PR_REP, IT_PROG, MK_REP | ||
+ | 7%: MK_MAN, AC_MGR, FI_MGR, PU_MAN, SA_MAN, ST_MANAGER | ||
+ | 9%: AD_PRES, AD_VP | ||
+ | </pre> | ||
+ | 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!!'. | ||
<!-- | <!-- | ||
<pre> | <pre> | ||
Línia 18: | Línia 25: | ||
BEGIN | BEGIN | ||
SELECT manager_id | SELECT manager_id | ||
− | INTO v_manager | + | INTO v_manager cursor!!!! |
FROM departments | FROM departments | ||
WHERE department_id = p_dept; | WHERE department_id = p_dept; | ||
Línia 29: | Línia 36: | ||
--> | --> | ||
− | b) En un bloc PL/SQL crea un cursor que recuperi tots els empleats ordenats per departament i | + | b) En un bloc PL/SQL crea un cursor que recuperi tots els departaments que tenen empleats (manager_id not null) ordenats per departament i utilitza la funció de l'apartat a) per omplir la taula PRESSUPOST convenientment. |
<!-- | <!-- | ||
DECLARE | DECLARE |
Revisió del 14:07, 19 març 2019
Esquema HR
1.- Crea una taula PRESSUPOST (CREATE TABLE) que contingui els següent camps: Nom_Department, First_Name, Last_Name del manager i Total_Salaris.
CREATE TABLE PRESSUPOST( Nom_Department VARCHAR2(30) PRIMARY KEY, First_Name VARCHAR2(20), Last_Name VARCHAR2(250), Total_Salaris NUMBER(5));
a) Crea una funció que a partir d'un número de departament ens retorni el total de salaris pressupostats per a aquell departament, tenint en compte els següents augments:
3%: AD_ASST, SA_REP, SH_CLERK, PU_CLERK, ST_CLERK 5%: AC_ACCOUNT, FI_ACCOUNT, HR_REP, PR_REP, IT_PROG, MK_REP 7%: MK_MAN, AC_MGR, FI_MGR, PU_MAN, SA_MAN, ST_MANAGER 9%: AD_PRES, AD_VP
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 departaments que tenen empleats (manager_id not null) ordenats per departament i utilitza la funció de l'apartat a) per omplir la taula PRESSUPOST 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