0% encontró este documento útil (0 votos)
15 vistas26 páginas

Procedimientos Almacenados

Los procedimientos almacenados son conjuntos de instrucciones SQL almacenadas en el servidor que permiten encapsular tareas repetitivas, reduciendo el tráfico de red y evitando el acceso directo a las tablas. Pueden aceptar parámetros de entrada y salida, permitiendo la interacción con los datos de la base de datos, aunque presentan desventajas como la dificultad de depuración y limitaciones en la lógica de negocio. Se pueden crear y llamar utilizando la sintaxis adecuada, y son útiles para realizar operaciones complejas de manera más eficiente.

Cargado por

jomel76sinani
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas26 páginas

Procedimientos Almacenados

Los procedimientos almacenados son conjuntos de instrucciones SQL almacenadas en el servidor que permiten encapsular tareas repetitivas, reduciendo el tráfico de red y evitando el acceso directo a las tablas. Pueden aceptar parámetros de entrada y salida, permitiendo la interacción con los datos de la base de datos, aunque presentan desventajas como la dificultad de depuración y limitaciones en la lógica de negocio. Se pueden crear y llamar utilizando la sintaxis adecuada, y son útiles para realizar operaciones complejas de manera más eficiente.

Cargado por

jomel76sinani
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 26

PROCEDIMIENTOS

ALMACENADOS
Un procedimiento almacenado es un conjunto de instrucciones
(comandos SQL) a las que se les da un nombre, que se almacena en el
servidor. Permiten encapsular tareas repetitivas.
Ventajas
• 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.

Desventajas
• Las instrucciones que se pueden utilizar dentro de un procedimiento
almacenado no están preparadas para implementar lógicas de negocios
muy complejas.

• Son difíciles de depurar.


• Los procedimientos almacenados se crean en la base de datos
seleccionada.
• Los procedimientos almacenados pueden hacer referencia a tablas, vistas
y otros procedimientos almacenados.
• Un procedimiento almacenado pueden incluir cualquier cantidad y tipo de
instrucciones.
• Para crear un procedimiento almacenado empleamos la instrucción
"create procedure".
La sintaxis básica parcial es:
create procedure NOMBRE_PROCEDIMIENTO()
begin
INSTRUCCIONES;
end

Para llamar al procedimiento almacenado se debe utilizar la cláusula


'call' y seguidamente el nombre del procedimiento almacenado:

call NOMBRE_PROCEDIMIENTO();
Cláusula 'delimiter'
Como un procedimiento almacenado puede tener muchos comandos SQL
entre las palabras claves begin y end se debe informar de alguna manera a
MySQL que no ejecute dichos comandos.
Para ello se utiliza el comando 'delimiter' cambiando el caracter ';' como fin de
instrucción. Luego se debe codificar el procedimiento almacenado cambiando
el delimitador con la siguiente sintaxis:
delimiter //
create procedure NOMBRE_PROCEDIMIENTO()
begin
INSTRUCCIONES;
end //
delimiter ;

Se utiliza el deliminador '//' como puede ser cualquier otro, por ejemplo '$':
EJEMPLO

drop table if exists libros; insert into libros(titulo,autor,editorial,precio,stock) values


('Alicia en el pais de las maravillas','Lewis Carroll','Emece',20.00, 9),
create table libros(
('Alicia en el pais de las maravillas','Lewis Carroll','Plaza',35.00, 50),
codigo int auto_increment,
('Aprenda PHP','Mario Molina','Siglo XXI',40.00, 3),
titulo varchar(40),
('El aleph','Borges','Emece',10.00, 18),
autor varchar(30),
('Ilusiones','Richard Bach','Planeta',15.00, 22),
editorial varchar(20),
('Java en 10 minutos','Mario Molina','Siglo XXI',50.00, 7),
precio decimal(5,2),
stock int, ('Martin Fierro','Jose Hernandez','Planeta',20.00, 3),

primary key(codigo) ('Martin Fierro','Jose Hernandez','Emece',30.00, 70),

); ('Uno','Richard Bach','Planeta',10.00, 120);


Crear un procedimiento almacenado que muestre los libros que tienen
menos de 10 unidades

drop procedure if exists pa_libros_menos_unidades;

delimiter //
create procedure pa_libros_menos_unidades()
begin
select * from libros
where stock<=10;
end //
delimiter ;

call pa_libros_menos_unidades();
EJEMPLO

drop table if exists empleados;

create table empleados(


documento char(8),
nombre varchar(20),
apellido varchar(20),
sueldo decimal(6,2),
cantidadhijos int,
seccion varchar(20),
primary key(documento)
);
insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria');
insert into empleados values('22333333','Luis','Lopez',300,0,'Contaduria');
insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas');
insert into empleados values('22555555','Susana','Garcia',400,2,'Secretaria');
insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria');
insert into empleados values('22777777','Pedro','Martinez',500,3,'Sistemas');
insert into empleados values('22888888','Ingrid','Loza',400,0,'Secretaria');
Crear un procedimiento almacenado llamado "pa_empleados_sueldo"
que muestre los nombres, apellidos y sueldos de los empleados.

drop procedure if exists pa_empleados_sueldo;


delimiter $$
create procedure pa_empleados_sueldo()
begin
select nombre,apellido,sueldo
from empleados;
end $$
delimiter ;
call pa_empleados_sueldo();
Crear un procedimiento almacenado llamado "pa_empleados_hijos" que seleccione los
nombres, apellidos y cantidad de hijos de los empleados que tienen hijos.
drop procedure if exists pa_empleados_con_hijos;

delimiter //
create procedure pa_empleados_con_hijos()
begin
select nombre,apellido,cantidadhijos
from empleados
where cantidadhijos>0;
end //
delimiter ;

call pa_empleados_con_hijos();
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS DE ENTRADA
Los procedimientos almacenados pueden recibir y devolver información, para ello se emplean
parámetros, de entrada y salida, respectivamente. 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
variables como parámetros al crearlo. La sintaxis es:
create procedure NOMBRE_PROCEDIMIENTO (in NOMBRE_PARAMETRO TIPO_DE_DATO)
begin
INSTRUCCIONES
end
• Los parámetros de entrada se definen luego del nombre del procedimiento, previo al nombre
del parámetro se le antecede la palabra clave 'in’.
• Los parámetros son locales al procedimiento, es decir, existen solamente dentro del mismo.
• 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).
• Los parámetros de entrada pueden ser de cualquier tipo de dato.
EJEMPLO

drop table if exists empleados;

create table empleados(


documento char(8),
nombre varchar(20),
apellido varchar(20),
sueldo decimal(6,2),
cantidadhijos int,
seccion varchar(20),
primary key(documento)
);
insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria');
insert into empleados values('22333333','Luis','Lopez',300,0,'Contaduria');
insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas');
insert into empleados values('22555555','Susana','Garcia',400,2,'Secretaria');
insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria');
insert into empleados values('22777777','Pedro','Martinez',500,3,'Sistemas');
insert into empleados values('22888888','Ingrid','Loza',400,0,'Secretaria');
Crear un procedimiento almacenado llamado "pa_empleados_sueldo_mayor" que muestre
los nombres, apellidos y sueldos de los empleados que tengan un sueldo superior o igual al
enviado como parámetro.
drop procedure if exists pa_empleado_sueldo_mayor;
delimiter //
create procedure pa_empleado_sueldo_mayor(in p_sueldo decimal(6,2))
begin
select nombre,apellido,sueldo
from empleados
where sueldo>=p_sueldo;
end //
delimiter ;
Ejecutar el procedimiento con distintos valores:
call pa_empleado_sueldo_mayor(400);
call pa_empleado_sueldo_mayor(500);
Crear un procedimiento almacenado llamado "pa_empleados_actualizar_sueldo" que
actualice los sueldos iguales al enviado como primer parámetro con el valor enviado como
segundo parámetro.
drop procedure if exists pa_empleados_actualizar_sueldo;
delimiter //
create procedure pa_empleados_actualizar_sueldo
(in p_sueldoanterior decimal(6,2),
in p_sueldonuevo decimal(6,2))
begin
update empleados set sueldo=p_sueldonuevo
where sueldo=p_sueldoanterior;
end //
delimiter ;
Ejecutar el procedimiento creado y verificar los datos
call pa_empleados_actualizar_sueldo(300, 350);
select * from empleados;
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS DE SALIDA
Los procedimientos almacenados pueden devolver información; para ello se
emplean parámetros de salida. El valor se retorna a quien realizó la llamada con
parámetros de salida.
Para que un procedimiento almacenado devuelva un valor se debe declarar una
variable con la palabra clave "out" al crear el procedimiento.
La sintaxis es:
create procedure NOMBRE_PROCEDIMIENTO (out NOMBRE_PARAMETRO TIPO_DE_DATO)
begin
INSTRUCCIONES
end
EJEMPLO drop procedure if exists pa_suma;

delimiter //
create procedure pa_suma(
in n1 float,
in n2 float,
out resultado float)
begin
select n1+n2 into resultado;
end //
delimiter ;

call pa_suma(10, 5, @total);

select @total;
EJEMPLO

drop table if exists libros;

create table libros(


codigo int auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio) values
('Uno','Richard Bach','Planeta',15),
('Ilusiones','Richard Bach','Planeta',12),
('El aleph','Borges','Emece',25),
('Aprenda PHP','Mario Molina','Nuevo siglo',50),
('Matematica estas ahi','Paenza','Nuevo siglo',18),
('Puente al infinito','Bach Richard','Sudamericana',14),
('Antología','Borges','Paidos',24),
('Java en 10 minutos','Mario Molina','Siglo XXI',45),
('Cervantes y el quijote','Borges- Casares','Planeta',34);
Crear un procedimiento almacenado que recibe el nombre de un autor y retorne la suma de
precios de todos sus libros además del promedio de precios.

drop procedure if exists pa_autor_sumaypromedio; begin


select titulo,editorial,precio
delimiter //
from libros
create procedure pa_autor_sumaypromedio(
where autor=p_autor;
in p_autor varchar(30),
select sum(precio) into suma
out suma decimal(6,2),
from libros
out promedio decimal(6,2))
where autor=p_autor;
select avg(precio) into promedio
from libros
where autor=p_autor;
end; //
delimiter ;
Llamar al procedimiento almacenado que retorna la suma de precios de todos los
libros y su promedio del autor 'Richard Bach’
call pa_autor_sumaypromedio('Richard Bach', @s,@p);
select @s, @p;

call pa_autor_sumaypromedio('Borges', @s,@p);


select @s, @p;
EJEMPLO

drop table if exists empleados;

create table empleados(


documento char(8),
nombre varchar(20),
apellido varchar(20),
sueldo decimal(6,2),
cantidadhijos int,
seccion varchar(20),
primary key(documento)
);
insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria’);
insert into empleados values('22333333','Luis','Lopez',500,0,'Contaduria’);
insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas’);
insert into empleados values('22555555','Susana','Garcia',700,2,'Secretaria’);
insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria’);
insert into empleados values('22777777','Pedro','Martinez',800,3,'Sistemas’);
insert into empleados values('22888888','Ingrid','Loza',550,0,'Secretaria');
Cree un procedimiento almacenado llamado "pa_seccion" el cual reciba el nombre de una
sección y retorne el promedio de sueldos de todos los empleados de esa sección y el valor
mayor de sueldo (de esa sección)

drop procedure if exists pa_seccion; begin


select avg(sueldo) into promedio
delimiter // from empleados
create procedure pa_seccion( where seccion=p_seccion;
in p_seccion varchar(20), select max(sueldo) into mayor
out promedio float, from empleados
out mayor float) where seccion=p_seccion;
end //
delimiter ;
Ejecutar el procedimiento con distintos valores.

call pa_seccion('Contaduria', @p, @m);


select @p,@m;

call pa_seccion('Secretaria', @p, @m);


select @p,@m;

call pa_seccion('Sistemas', @p, @m);


select @p,@m;

También podría gustarte