Sie sind auf Seite 1von 16

2012

EJERCICIOS 1 PL/SQL

Javier Garca Cambronel SEGUNDO DE ASIR 23/01/2012

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012

ENTRANDO UN NUESTRA BASE DE DATOS

CREANDO LAS TABLAS

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

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012

ENTRANDO UN NUESTRA BASE DE DATOS


oracle@asir-VirtualBox1:~$ sqlplus SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 23 10:10:11 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. Enter user-name: asir1 as sysdba Enter password: Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 339738624 bytes Fixed Size 1219304 bytes Variable Size 71304472 bytes Database Buffers 264241152 bytes Redo Buffers 2973696 bytes Database mounted. Database opened.

SEGUNDO DE ASIR

Pgina 2

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012

CREANDO LAS TABLAS


Creamos la tabla de los departamentos CDIGO TABLA DEPART CREATE TABLE DEPART ( DEPT_NO NUMBER(2) NOT NULL, DNOMBRE VARCHAR2(14), LOC VARCHAR2(14), CONSTRAINT PK_DEPT_NO PRIMARY KEY (DEPT_NO) ); Como vemos se crea perfectamente

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

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012


Y no hay que olvidarnos de hacer la integridad referencial para que nuestra base de datos se mantenga fiable. CREANDO LA INTEGRIDAD REFERENCIAL ALTER TABLE EMPLE ADD CONSTRAINT fk_dept_no FOREIGN KEY(DEPT_NO) REFERENCES DEPART(DEPT_NO) ON DELETE CASCADE;

SEGUNDO DE ASIR

Pgina 4

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012

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

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012


INSERT INTO EMPLE VALUES (7902,'FERNANDEZ','ANALISTA',7566,TO_DATE('03/12/1981', 'DD/MM/YYYY'),390000, NULL,20); INSERT INTO EMPLE VALUES (7934,'MUOZ','EMPLEADO',7782,TO_DATE('23/01/1982', 'DD/MM/YYYY'), 169000,NULL,10);

Y hacemos un commit para verificarlo COMMIT;

SEGUNDO DE ASIR

Pgina 6

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012

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

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012


20 7839 REY 10 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 7934 MU??OZ 10 EMPLEADO 7782 23-JAN-82 169000

14 rows selected.

SEGUNDO DE ASIR

Pgina 8

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012


Ahora incrementamos el salario el 10% a los empleados que tengan una comisin superior al 5% del salario para ello introducimos el siguiente cdigo en el que actualizamos la tabla emple seleccionando el salario y dicindole el porcentaje a aumentar donde el salario cumpla la condicin de que ese salarios sea mayor al a 5 entre cien o lo que viene siendo lo mismo al cinco por ciento. BEGIN UPDATE EMPLE SET SALARIO = SALARIO+SALARIO*(10/100) WHERE COMISION > (SALARIO*5/100); END; /

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

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012


7566 JIMENEZ DIRECTOR 20 7654 MARTIN 30 7698 NEGRO 30 VENDEDOR 7839 02-APR-81 386750

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

[EJERCICIOS 1 PL/SQL] 23 de enero de 2012


Por ltimo solo faltara la comprobacin haciendo el select pertinente y vemos como los cambios han tenido efecto. select * from depart;

SEGUNDO DE ASIR

Pgina 15

Das könnte Ihnen auch gefallen