Procedimientos Almacenados

12
UD – Planificación y gestión del desarrollo de software Actividad 3: Procedimientos almacenados

Transcript of Procedimientos Almacenados

Page 1: Procedimientos Almacenados

UD – Planificación y gestión del desarrollo de software

Actividad 3: Procedimientos almacenados

Page 2: Procedimientos Almacenados

Cont

enid

osActividad 2: Procedimientos almacenados

1. Creación de procedimientos2. Declaración de procedimientos

Page 3: Procedimientos Almacenados

Procedimientos almacenados Un procedimiento almacenado es un conjunto de instrucciones a las que se les

da un nombre, se almacena en la base de datos activa. Permiten agrupar y organizar tareas repetitivas.

Ventajas: - comparten la lógica de la aplicación con las otras aplicaciones, con lo cual el

acceso y las modificaciones de los datos se hacen en un solo sitio. - permiten realizar todas las operaciones que los usuarios necesitan evitando

que tengan acceso directo a las tablas. - reducen el tráfico de red; en vez de enviar muchas instrucciones, los usuarios

realizan operaciones enviando una única instrucción, lo cual disminuye el número de solicitudes entre el cliente y el servidor.

Un procedimiento almacenados puede hacer referencia a objetos que no existen al momento de crearlo. Los objetos deben existir cuando se ejecute el procedimiento almacenado.

Page 4: Procedimientos Almacenados

Procedimientos Almacenados (crear- ejecutar)• Al crear un procedimiento almacenado, las instrucciones que contiene se

analizan para verificar si son correctas sintácticamente. Si se encuentra algún error, el procedimiento se compila, pero aparece un mensaje "con advertencias" que indica tal situación.

• Un procedimiento almacenado se invoca llamándolo.• En primer lugar se deben tipear y probar las instrucciones que se incluyen en

el procedimiento almacenado, luego, si se obtiene el resultado esperado, se crea el procedimiento.

• Los procedimientos almacenados pueden hacer referencia a tablas, vistas, a funciones definidas por el usuario, a otros procedimientos almacenados.

• Un procedimiento almacenado pueden incluir cualquier cantidad y tipo de instrucciones DML (de manipulación de datos, como insert, update, delete), no instrucciones DDL (de definición de datos, como create..., drop... alter...).

• Para crear un procedimiento almacenado empleamos la instrucción "create procedure". La sintaxis básica parcial es:

• create or replace procedure NOMBREPROCEDIMIENTO • As• begin • INSTRUCCIONES • end;

Page 5: Procedimientos Almacenados

Procedimientos Almacenados (crear- ejecutar)• El bloque de instrucciones comienza luego de "begin" y acaba con "end".• Si empleamos "or replace", se sobreescribe (se reemplaza) un procedimiento

existente; si se omite y existe un procedimiento con el nombre que le asignamos, Oracle mostrará un mensaje de error indicando tal situación.

• Para diferenciar los procedimientos almacenados del sistema de los procedimientos almacenados creados por el usuario use un prefijo, por ejemplo "pa_" cuando les de el nombre.

• Con las siguientes instrucciones creamos un procedimiento almacenado llamado "pa_libros_aumentar10" que incrementa en un 10% el precio de todos los libros:

create procedure pa_libros_aumentar10 as update libros set precio=precio+precio*0.1;

• Entonces, creamos un procedimiento almacenado colocando "create procedure" (o "create or replace", si es que desea reemplazar el existente), luego el nombre del procedimiento y seguido de "as" las sentencias que definen el procedimiento.

• Para ejecutar el procedimiento almacenado creado anteriormente tipeamos:• execute pa_libros_aumentar10; • Entonces, para ejecutar un procedimiento almacenado colocamos "execute"

seguido del nombre del procedimiento.

Page 6: Procedimientos Almacenados

PROBLEMAUna librería almacena los datos de sus libros en una tabla denominada "libros".Eliminamos "libros", creamos la tabla y luego ingresamos algunos registros:

drop table libros; create table libros( titulo varchar2(40), autor varchar2(30), editorial varchar2(20), precio number(5,2) );

insert into libros values('Uno','Richard Bach','Planeta',15); insert into libros values('Ilusiones','Richard Bach','Planeta',18); insert into libros values('El aleph','Borges','Emece',25); insert into libros values('Aprenda PHP','Mario Molina','Nuevo siglo',45); insert into libros values('Matematica estas ahi','Paenza','Nuevo siglo',12); insert into libros values('Java en 10 minutos','Mario Molina','Paidos',35);

La librería, frecuentemente, aumenta los precios de los libros en un 10%. Necesitamos un procedimiento almacenado que actualice los precios de los libros aumentándolos en un 10%:

create or replace procedure pa_libros_aumentar10 as begin update libros set precio=precio+(precio*0.1); end;

Lo ejecutamos:execute pa_libros_aumentar10; Verificamos que los precios han aumentado:select *from libros; Volvemos a ejecutar el procedimiento:execute pa_libros_aumentar10; Verificamos que los precios han aumentado nuevamente:select *from libros

Page 7: Procedimientos Almacenados

PRIMER PROBLEMAUna empresa almacena los datos de sus empleados en una tabla llamada "empleados".1- Eliminamos la tabla y la creamos:drop table empleados; create table empleados( documento char(8), nombre varchar2(20), apellido varchar2(20), sueldo number(6,2), cantidadhijos number(2,0), fechaingreso date, primary key(documento) ); 2- Ingrese algunos registros:insert into empleados values('22222222','Juan','Perez',200,2,'10/10/1980'); insert into empleados values('22333333','Luis','Lopez',250,0,'01/02/1990'); insert into empleados values('22444444','Marta','Perez',350,1,'02/05/1995'); insert into empleados values('22555555','Susana','Garcia',400,2,'15/12/2000'); insert into empleados values('22666666','Jose Maria','Morales',500,3,'25/08/2005');

3- Cree (o reemplace) el procedimiento almacenado llamado "pa_aumentarsueldo" que aumente los sueldos inferiores al promedio en un 20%4- Ejecute el procedimiento creado anteriormente5- Verifique que los sueldos han aumentado6- Ejecute el procedimiento nuevamente7- Verifique que los sueldos han aumentado8- Elimine la tabla "empleados_antiguos"9- Cree la tabla "empleados_antiguos"create table empleados_antiguos( documento char(8), nombre varchar2(40) ); 10- Cree (o reemplace) un procedimiento almacenado que ingrese en la tabla "empleados_antiguos" el documento, nombre y apellido (concatenados) de todos los empleados de la tabla "empleados" que ingresaron a la empresa hace más de 10 años11- Ejecute el procedimiento creado anteriormente12- Verifique que la tabla "empleados_antiguos" ahora tiene registros (3 registros)

Page 8: Procedimientos Almacenados

PROCEDIMIENTOS ALMACENADOS (PARÁMETROS DE ENTRADA) Los procedimientos almacenados pueden recibir y devolver información; para ello se

emplean parámetros. Veamos los primeros. Los parámetros de entrada posibilitan pasar información a un

procedimiento. Para que un procedimiento almacenado admita parámetros de entrada se deben declarar al crearlo. La sintaxis es:

create or replace procedure NOMBREPROCEDIMIENTO (PARAMETRO in TIPODEDATO) as begin INSTRUCCIONES; end;

Los parámetros se definen luego del nombre del procedimiento. Pueden declararse varios parámetros por procedimiento, se separan por comas.

Cuando el procedimiento es ejecutado, deben explicitarse valores para cada uno de los parámetros (en el orden que fueron definidos), a menos que se haya definido un valor por defecto, en tal caso, pueden omitirse.

Creamos un procedimiento que recibe el nombre de una editorial como parámetro y luego lo utiliza para aumentar los precios de tal editorial:

create or replace procedure pa_libros_aumentar10(aeditorial in varchar2) as begin update libros set precio=precio+(precio*0.1) where editorial=aeditorial; end;

El procedimiento se ejecuta colocando "execute" (o "exec") seguido del nombre del procedimiento y un valor para el parámetro:

execute pa_libros_aumentar10('Planeta'); Luego de definir un parámetro y su tipo, opcionalmente, se puede especificar un

valor por defecto; tal valor es el que asume el procedimiento al ser ejecutado si no recibe parámetros. Si no se coloca valor por defecto, un procedimiento definido con parámetros no puede ejecutarse sin valores para ellos. El valor por defecto puede ser "null" o una constante

Page 9: Procedimientos Almacenados

PROCEDIMIENTOS ALMACENADOS (PARÁMETROS DE ENTRADA)

Creamos otro procedimiento que recibe 2 parámetros, el nombre de una editorial y el valor de incremento (que tiene por defecto el valor 10):

create or replace procedure pa_libros_aumentar(aeditorial in varchar2,aporcentaje in number default 10) as begin update libros set precio=precio+(precio*aporcentaje/100) where editorial=aeditorial; end;

El procedimiento se ejecuta colocando "execute" (o "exec") seguido del nombre del procedimiento y los valores para los parámetros separados por comas:

execute pa_libros_aumentar('Planeta',30); Podemos omitir el segundo parámetro al invocar el procedimiento porque tiene

establecido un valor por defecto: execute pa_libros_aumentar('Planeta'); En caso que un procedimiento tenga definidos varios parámetros con valores por

defecto y al invocarlo colocamos uno solo, Oracle asume que es el primero de ellos. si son de tipos de datos diferentes, Oracle los convierte. Por ejemplo, definimos un procedimiento almacenado de la siguiente manera:

create or replace procedure pa_libros_insertar (atitulo in varchar2 default null, aautor in varchar2 default 'desconocido', aeditorial in varchar2 default 'sin especificar', aprecio in number default 0) as begin insert into libros values (atitulo,aautor,aeditorial,aprecio); end;

Si luego llamamos al procedimiento enviándoles solamente el primer y cuarto parámetro correspondientes al título y precio:

execute pa_libros_insertar('Uno',100); Oracle asume que los argumentos son el primero y segundo, el registro que se

almacenará será: Uno,100,sin especificar,0;

Page 10: Procedimientos Almacenados

PROCEDIMIENTOS ALMACENADOS (PARÁMETROS DE ENTRADA)

Trabajamos con la tabla "libros" de una librería.Eliminamos la tabla y la creamos nuevamente:drop table libros; create table libros( titulo varchar2(40), autor varchar2(30), editorial varchar2(20), precio number(5,2) ); Ingresamos algunos registros:insert into libros values ('Uno','Richard Bach','Planeta',15); insert into libros values ('Ilusiones','Richard Bach','Planeta',12); insert into libros values ('El aleph','Borges','Emece',25); insert into libros values ('Aprenda PHP','Mario Molina','Nuevo siglo',50); insert into libros values ('Matematica estas ahi','Paenza','Nuevo siglo',18); insert into libros values ('Puente al infinito','Bach Richard','Sudamericana',14); insert into libros values ('Antología','J. L. Borges','Paidos',24); insert into libros values ('Java en 10 minutos','Mario Molina','Siglo XXI',45); insert into libros values ('Cervantes y el quijote','Borges- Casares','Planeta',34); Creamos un procedimiento que recibe el nombre de una editorial y luego aumenta en un 10% los precios de los libros de tal editorial:

create or replace procedure pa_libros_aumentar10(aeditorial in varchar2) as begin update libros set precio=precio+(precio*0.1) where editorial=aeditorial; end;

Ejecutamos el procedimiento:execute pa_libros_aumentar10('Planeta'); Verificamos que los precios de los libros de la editorial "Planeta" han aumentado un 10%:select *from libros; Creamos otro procedimiento que recibe 2 parámetros, el nombre de una editorial y el valor de incremento (que tiene por defecto el valor 10):create or replace procedure pa_libros_aumentar(aeditorial in varchar2,aporcentaje in number default 10) as begin update libros set precio=precio+(precio*aporcentaje/100) where editorial=aeditorial; end; Ejecutamos el procedimiento enviando valores para ambos argumentos:execute pa_libros_aumentar('Planeta',30); Consultamos la tabla "libros" para verificar que los precios de los libros de la editorial "Planeta" han sido aumentados en un 30%:select *from libros;

Page 11: Procedimientos Almacenados

Ejecutamos el procedimiento "pa_libros_aumentar" omitiendo el segundo parámetro porque tiene establecido un valor por defecto:

execute pa_libros_aumentar('Paidos'); Consultamos la tabla "libros" para verificar que los precios de los libros de la

editorial "Paidos" han sido aumentados en un 10% (valor por defecto): select *from libros; Definimos un procedimiento almacenado que ingrese un nuevo libro en la tabla

"libros": create or replace procedure pa_libros_insertar (atitulo in varchar2 default null,

aautor in varchar2 default 'desconocido', aeditorial in varchar2 default 'sin especificar', aprecio in number default 0) as begin insert into libros values (atitulo,aautor,aeditorial,aprecio); end;

Llamamos al procedimiento sin enviarle valores para los parámetros: execute pa_libros_insertar; Veamos cómo se almacenó el registro: select *from libros; Llamamos al procedimiento enviándole valores solamente para el primer y cuarto

parámetros correspondientes al título y precio: execute pa_libros_insertar('Uno',100); Oracle asume que los argumentos son el primero y segundo, vea cómo se almacenó

el nuevo registro: select *from libros;

PROCEDIMIENTOS ALMACENADOS (PARÁMETROS DE ENTRADA)

Page 12: Procedimientos Almacenados

Una empresa almacena los datos de sus empleados en una tabla llamada "empleados".1- Eliminamos la tabla y la creamos:drop table empleados; create table empleados( documento char(8), nombre varchar2(20), apellido varchar2(20), sueldo number(6,2), fechaingreso date ); 2- Ingrese algunos registros:insert into empleados values('22222222','Juan','Perez',300,'10/10/1980'); insert into empleados values('22333333','Luis','Lopez',300,'12/05/1998'); insert into empleados values('22444444','Marta','Perez',500,'25/08/1990'); insert into empleados values('22555555','Susana','Garcia',400,'05/05/2000'); insert into empleados values('22666666','Jose Maria','Morales',400,'24/10/2005'); 3- Cree un procedimiento almacenado llamado "pa_empleados_aumentarsueldo". Debe incrementar el sueldo de los empleados con cierta cantidad de años en la empresa (parámetro "ayear" de tipo numérico) en un porcentaje (parámetro "aporcentaje" de tipo numerico); es decir, recibe 2 parámetros.4- Ejecute el procedimiento creado anteriormente.

5- Verifique que los sueldos de los empleados con más de 10 años en la empresa han aumentado un 20%6- Ejecute el procedimiento creado anteriormente enviando otros valores como parámetros (por ejemplo, 8 y 10)7- Verifique que los sueldos de los empleados con más de 8 años en la empresa han aumentado un 10%8- Ejecute el procedimiento almacenado "pa_empleados_aumentarsueldo" sin parámetros9- Cree un procedimiento almacenado llamado "pa_empleados_ingresar" que ingrese un empleado en la tabla "empleados", debe recibir valor para el documento, el nombre, apellido y almacenar valores nulos en los campos "sueldo" y "fechaingreso"10- Ejecute el procedimiento creado anteriormente y verifique si se ha ingresado en "empleados" un nuevo registro11- Reemplace el procedimiento almacenado llamado "pa_empleados_ingresar" para que ingrese un empleado en la tabla "empleados", debe recibir valor para el documento (con valor por defecto nulo) y fechaingreso (con la fecha actual como valor por defecto), los demás campos se llenan con valor nulo12- Ejecute el procedimiento creado anteriormente enviándole valores para los 2 parámetros y verifique si se ha ingresado en "empleados" un nuevo registro13- Ejecute el procedimiento creado anteriormente enviando solamente la fecha de ingreso y vea el resultadoOracle toma el valor enviado como primer argumento e intenta ingresarlo en el campo "documento", muestra un mensaje de error indicando que el valor es muy grande, ya que tal campo admite 8 caracteres.14- Cree (o reemplace) un procedimiento almacenado que reciba un documento y elimine de la tabla "empleados" el empleado que coincida con dicho documento15- Elimine un empleado empleando el procedimiento del punto anterior16- Verifique la eliminación

PROCEDIMIENTOS ALMACENADOS (PARÁMETROS DE ENTRADA)