Beruflich Dokumente
Kultur Dokumente
EJERCICIOS 1 PL/SQL
INTRODUCIENDO DATOS
EJERCICIOS
1.- En la tabla emp incrementar el salario el 10% a los empleados que tengan una comisin superior al 5% del salario.
2.- Aadir la columna total2 y en ella escribir la suma del salario y la comisin de los empleados con comisin distinta de 0.
3.- Insertar un empleado en la tabla EMP. Su nmero ser superior a los existentes y la fecha de incorporacin a la empresa ser la actual.
4.- Realizar un procedimiento para borrar un empleado recibiendo como parmetro el nmero de empleado. 5.- Realizar un procedimiento para modificar la localidad de un departamento. El procedimiento recibe como parmetros la localidad y el nmero de departamento
SEGUNDO DE ASIR
Pgina 1
SEGUNDO DE ASIR
Pgina 2
Creamos la tabla de los empleados CDIGO TABLA EMPLE CREATE TABLE EMPLE ( EMP_NO NUMBER(4) NOT NULL, APELLIDO VARCHAR2(10), OFICIO VARCHAR2(10), DIR NUMBER(4) , FECHA_ALT DATE , SALARIO NUMBER(10), COMISION NUMBER(10), DEPT_NO NUMBER(2) NOT NULL, CONSTRAINT PK_EMP_NO PRIMARY KEY (EMP_NO) ); Y vemos como se crea perfectamente
SEGUNDO DE ASIR
Pgina 3
SEGUNDO DE ASIR
Pgina 4
INTRODUCIENDO DATOS
INTRODUCIMOS LOS DEPARTAMENTOS Introducimos los siguientes datos con el nmero de departamento al que pertenecen, el nombre y su localizacin. INSERT INTO DEPART VALUES (10,'CONTABILIDAD','SEVILLA'); INSERT INTO DEPART VALUES (20,'INVESTIGACION','MADRID'); INSERT INTO DEPART VALUES (30,'VENTAS','BARCELONA'); INSERT INTO DEPART VALUES (40,'PRODUCCION','BILBAO');
Hacemos un commit para que los datos queden correctamente guardados COMMIT;
INTRODUCIMOS LOS EMPLEADOS INSERT INTO EMPLE VALUES (7369,'SANCHEZ','EMPLEADO',7902,TO_DATE('17/12/1980', 'DD/MM/YYYY'),104000,NULL,20); INSERT INTO EMPLE VALUES (7499,'ARROYO','VENDEDOR',7698,TO_DATE('20/02/1980', 'DD/MM/YYYY'), 208000,39000,30); INSERT INTO EMPLE VALUES (7521,'SALA','VENDEDOR',7698,TO_DATE('22/02/1981', 'DD/MM/YYYY'), 162500,65000,30); INSERT INTO EMPLE VALUES (7566,'JIMENEZ','DIRECTOR',7839,TO_DATE('02/04/1981', 'DD/MM/YYYY'), 386750,NULL,20); INSERT INTO EMPLE VALUES (7654,'MARTIN','VENDEDOR',7698,TO_DATE('29/09/1981', 'DD/MM/YYYY'), 162500,182000,30); INSERT INTO EMPLE VALUES (7698,'NEGRO','DIRECTOR',7839,TO_DATE('01/05/1981', 'DD/MM/YYYY'), 370500,NULL,30); INSERT INTO EMPLE VALUES (7782,'CEREZO','DIRECTOR',7839,TO_DATE('09/06/1981', 'DD/MM/YYYY'), 318500,NULL,10); INSERT INTO EMPLE VALUES (7788,'GIL','ANALISTA',7566,TO_DATE('09/11/1981', 'DD/MM/YYYY'), 390000,NULL,20); INSERT INTO EMPLE VALUES (7839,'REY','PRESIDENTE',NULL,TO_DATE('17/11/1981', 'DD/MM/YYYY'), 650000,NULL,10); INSERT INTO EMPLE VALUES (7844,'TOVAR','VENDEDOR',7698,TO_DATE('08/09/1981', 'DD/MM/YYYY'), 195000,0,30); INSERT INTO EMPLE VALUES (7876,'ALONSO','EMPLEADO',7788,TO_DATE('23/09/1981', 'DD/MM/YYYY'), 143000,NULL,20); INSERT INTO EMPLE VALUES (7900,'JIMENO','EMPLEADO',7698,TO_DATE('03/12/1981', 'DD/MM/YYYY'), 123500,NULL,30); SEGUNDO DE ASIR Pgina 5
SEGUNDO DE ASIR
Pgina 6
EJERCICIOS
1.- En la tabla emp incrementar el salario el 10% a los empleados que tengan una comisin superior al 5% del salario.
Primero vemos todos los empleados que tenemos en nuestra tabla con sus caractersticas. Y vemos los que en principio podran resultar afectados, es decir, los que tienen algn tipo de comisin. SQL> select * from emple ; EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7369 SANCHEZ EMPLEADO 7902 17-DEC-80 104000 20 7499 ARROYO 30 7521 SALA 30 VENDEDOR 7698 20-FEB-80 208000 39000
VENDEDOR
7698 22-FEB-81
162500
65000
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7566 JIMENEZ DIRECTOR 7839 02-APR-81 386750 20 7654 MARTIN 30 7698 NEGRO 30 VENDEDOR 7698 29-SEP-81 162500 182000
DIRECTOR
7839 01-MAY-81
370500
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7782 CEREZO DIRECTOR 7839 09-JUN-81 318500 10 7788 GIL ANALISTA 7566 09-NOV-81 390000 Pgina 7
SEGUNDO DE ASIR
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7844 TOVAR VENDEDOR 7698 08-SEP-81 195000 0 30 7876 ALONSO 20 7900 JIMENO 30 EMPLEADO 7788 23-SEP-81 143000
EMPLEADO
7698 03-DEC-81
123500
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7902 FERNANDEZ ANALISTA 7566 03-DEC-81 390000 20 7934 MU??OZ 10 EMPLEADO 7782 23-JAN-82 169000
14 rows selected.
SEGUNDO DE ASIR
Pgina 8
Volvemos a seleccionar a todos los usuarios para comprobar que solo han cambiado los que lo tienen que hacer, es decir, los que hayan cumplido las caractersticas. SQL> select * from emple; EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7369 SANCHEZ EMPLEADO 7902 17-DEC-80 104000 20 7499 ARROYO 30 7521 SALA 30 VENDEDOR 7698 20-FEB-80 228800 39000
VENDEDOR
7698 22-FEB-81
178750
65000
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------SEGUNDO DE ASIR Pgina 9
7698 29-SEP-81
178750
182000
DIRECTOR
7839 01-MAY-81
370500
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7782 CEREZO DIRECTOR 7839 09-JUN-81 318500 10 7788 GIL 20 7839 REY 10 ANALISTA 7566 09-NOV-81 390000
PRESIDENTE
17-NOV-81
650000
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7844 TOVAR VENDEDOR 7698 08-SEP-81 195000 0 30 7876 ALONSO 20 7900 JIMENO 30 EMPLEADO 7788 23-SEP-81 143000
EMPLEADO
7698 03-DEC-81
123500
EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7902 FERNANDEZ ANALISTA 7566 03-DEC-81 390000 20
SEGUNDO DE ASIR
Pgina 10
[EJERCICIOS 1 PL/SQL] 23 de enero de 2012 2.- Aadir la columna total2 y en ella escribir la suma del salario y la comisin de los empleados con comisin distinta de 0.
Como vemos creamos el siguiente bloque con el cual alteramos y/o modificamos la tabla empleado, seleccionando con el cursor la comisin desde la tabla empleado que sea distinta de 0 para seguidamente actualizar y crear esa columna con la suma de SALARIO+COMISION ALTER TABLE EMPLE ADD(TOTAL2 NUMBER(10)); DECLARE CURSOR CURSOR2 IS SELECT COMISION,SALARIO FROM EMPLE WHERE COMISION <>0 FOR UPDATE; BEGIN FOR REG IN CURSOR2 LOOP UPDATE EMPLE SET TOTAL2 = SALARIO+COMISION WHERE CURRENT OF CURSOR2; END LOOP; END; /
Ahora lo comprobamos para ver que todo es correcto select total2 from emple;
SEGUNDO DE ASIR
Pgina 11
[EJERCICIOS 1 PL/SQL] 23 de enero de 2012 3.- Insertar un empleado en la tabla EMP. Su nmero ser superior a los existentes y la fecha de incorporacin a la empresa ser la actual.
Como podemos ver creamos este bloque recogiendo los datos necesarios en variables, para que luego al ser llamadas, realicen su funcin y creemos un empleado que es superior a los existentes y la fecha como indicamos en el cdigo que sea la actual. DECLARE num_emple EMPLE.EMP_NO%TYPE; fecha EMPLE.FECHA_ALT%TYPE; BEGIN SELECT MAX(emp_no) INTO num_emple FROM EMPLE; SELECT SYSDATE INTO fecha FROM DUAL; num_emple := num_emple+1; INSERT INTO EMPLE VALUES (num_emple, 'JAVIER', 'EMPLEADO', 7777, fecha, 152000, NULL, 40); END; / Lo comprobamos haciendo el siguiente select partiendo del que antes era el mayor ID y vemos como ha tenido xito nuestro bloque select * from emple where emp_no>=7934; EMP_NO APELLIDO OFICIO DIR FECHA_ALT SALARIO COMISION ---------- ---------- ---------- ---------- --------- ---------- ---------DEPT_NO ---------7934 MU??OZ EMPLEADO 7782 23-JAN-82 169000 10 7935 JAVIER 40 EMPLEADO 7777 23-JAN-12 152000
SEGUNDO DE ASIR
Pgina 12
[EJERCICIOS 1 PL/SQL] 23 de enero de 2012 4.- Realizar un procedimiento para borrar un empleado recibiendo como parmetro el nmero de empleado.
Creamos el siguiente procedimiento en el que el nico parmetro que se nos va a pedir va a ser el nmero de empleado como podemos ver y a partir de ese numero como vemos en el cdigo ejecutara sobre el un DELETE. CREATE OR REPLACE PROCEDURE borrar_emple( num_emple emple.emp_no%TYPE) AS BEGIN DELETE FROM emple WHERE emp_no = num_emple; END borrar_emple; / Vemos que tenemos xito al crear el procedimiento
Procedemos a borrar el empleado que habamos creado anteriormente. Exec borrar_emple(7935) y vemos que se completa correctamente
Por ltimo lo comprobamos y vemos que hemos tenido xito. select * from emple where emp_no>=7934;
SEGUNDO DE ASIR
Pgina 13
[EJERCICIOS 1 PL/SQL] 23 de enero de 2012 5.- Realizar un procedimiento para modificar la localidad de un departamento. El procedimiento recibe como parmetros la localidad y el nmero de departamento.
En el siguiente procedimiento que creamos va a ser ms complejo que el anterior y vamos a recibir dos parmetros en este orden, nmero de departamento y el nombre de la localidad nueva para ello indicamos los datos que se recogen y el tipo de datos y se hace una actualiozacin indicando cuales son los datos que se tienen que actualizar. CREATE OR REPLACE PROCEDURE modificar_localidad( num_depart NUMBER, localidad VARCHAR2) AS BEGIN UPDATE depart SET loc = localidad WHERE dept_no = num_depart; END modificar_localidad; / Como vemos el procedimiento se ha creado con xito
Y lo ejecutamos, pasndole los parmetros correspondientes, con el nombre de la nueva localidad como cuando se pasa cualquier cadena, entre comillas simples. exec modificar_localidad (10,'VALLADOLID');
SEGUNDO DE ASIR
Pgina 14
SEGUNDO DE ASIR
Pgina 15