Está en la página 1de 30

PROCEDIMIENTOS

ALMACENADOS EN
MYSQL

UNIDAD TRES
QU ES PROCEDIMIENTO?

Es una rutina que puede ser llamada en cualquier momento y


que se encuentra almacenada dentro de la base de datos,
pudiendo validar datos de entrada, utilizar cualquier valor de la
base de datos, devolver solo lo que la misma permita y adems,
ser usado por cualquier lenguaje de programacin; lo que
significa que si tienes un sistema desarrollado en PHP y que
ejecuta cierto procedimiento almacenado, no estas atado a que
solo lo puedas llamar desde ese lenguaje, si no que puedes usar
otros como, JAVA, ASP.NET, etc .
QU PUEDO
USAR Y QU NO?
Dentro del procedimiento podrs hacer uso de los bloques de control
de flujo de datos que nos permitirn determinar el orden en el que se
ejecutarn las instrucciones, bloques (IF, While, Repeat - Until, Labe
Loop, CASE, etc.).
Las sentencias que podemos usar dentro de los procedimientos son:
INSERT, UPDATE, SELECT, DROP, CREATE, REPLACE.
Por otro lado, no podemos usar:
- CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE
- CREATE FUNCTION, DROP FUNCTION
- CREATE TRIGGER, DROP TRIGGER
create procedure nombre_del_procedimiento (Lista
y cul es la de parmetros)

Sintaxis begin /* indica el inicio de la rutina */


/* aqui va el contenido */
? end// /* indica el fin de la rutina */
Y para ver las
SELECT specific_name, routine_type FROM
rutinas de mi information_schema.routines;
BD?
Para ver la
definicin de SELECT routine_definition FROM
information_schema.routines WHERE
una rutina en specific_name = obtenerprecio';
particular
Show create procedure nombrebd.nombreproc
-> si queremos consultar de otra bd

Otra manera
Show create procedure nombreproc
-> de la base de datos en uso
Y cmo
elimino un mysql> drop procedure obtenerprecio;
procedimiento
almacenado?
Oiga, y para
mandar a
llamar un mysql> call nombre_del_procedimiento();

procedimiento
?
Es buena
prctica antes
de crear un
CREATE PROCEDURE IF EXISTS
procedimiento Nombre_procedimiento
verificar si
existe. Y
NOTA: Al hacer esto se debe tener mucha precaucin, ya
eliminarlo que si existe un procedimiento con el mismo nombre que
se esta creando, sta reemplazar a la existente.
# comentario con almohadilla (solo una linea)

-- comentario con 2 guiones (solo una linea)


Y los
comentarios? /* esto es
un comentario
multilinea */
Y las
estructuras de
control qu
onda?

Donde ETIQUETA es una cadena de caracteres cualquiera.


Para el caso de este bucle, su cdigo se ejecutar hasta que se encuentre la sentencia LEAVE ETIQUETA cuyo objetivo es similar a la
funcin que cumple BREAK en algunos lenguajes de programacin
1.- funcin IF (if en una sola lnea)

Funciones de 2.- CASE (similar al SWITCH o SELEC CASE de algunos lenguajes de programacin)
control
La lista de parmetros es lo que est entre parntesis inmediatamente
despus del nombre del procedimiento almacenado y pueden ser:

IN
y los OUT
INOUT
parmetros?
IN: es opcional colocarlo, puedes no indicar que tipo de argumento usars
y por defecto se tomar como IN (entrada).

Los valores que tomen las variables de este tipo no se conservarn una vez
termine de ejecutarse el procedimiento.

IN
OUT: los valores de este tipo de argumentos se establecen dentro

O
del procedimiento y pueden ser accedidos mas adelante,
aun cuando la ejecucin del procedimiento haya terminado.

U
T
INOUT: una combinacin de las dos anteriores, la variable puede
recibir valores de entrada y puede ser accedida mas adelante .

INOUT
EJEMPLO

01
Cree un procedimiento que actualice el precio de venta de
todos los productos, incrementando el precio en un
porcentaje.
mysql> alter table productos add precioventa double after precio;
Query OK, 0 rows affected (1.35 sec)
Tenemos Records: 0 Duplicates: 0 Warnings: 0

que agregar
la columna
precioventa
Mysql>Delimiter //

Paso UNO
Cambiar el
Delimitador Ya sabes porque!!!
1. Enviaremos como parmetro el porcentaje, que se usar para
calcular el precio de venta. Es un parmetro de ?

2. El objetivo es actualizar el precioventa de cada uno de los productos


ya que actualmente est as:

Paso DOS
ANALICEMOS
Analicemos
Analicemos
Analicemos

3. Como calculamos el porcentaje que se aumentar?


Paso TRES
Manos a la obra!!
Paso CUATRO
mysql> delimiter ;
NO olvide
cambiar el
delimitador

;
Paso CINCO
Y cmo
ejecutamos el
PROCEDIMIENTO
?
Paso SEIS
Resultado
Archivo: procedimientoprecioventa.php

Psssttt!!

Y php? jejeje
Archivo: procedimientoprecioventa.php
CONTINUACION

Psssttt!!

Y php? jejeje
EJEMPLO

02
Crear una funcin que retorne que productos han alcanzado
su stock.
EJEMPLO

03
Crear una funcin que retorne el promedio de las ventas de
los representante de ventas, dado el numero de oficina
create procedure prodmasvendido(fi date, ft date)
begin
declare pmv varchar(40);
select descripcion_prod into pmv from productos where
id_prod = (
select idprod from detallesventas group by idprod
having sum(cantidad) = (select distinct sum(cantidad) from
detallesventas
group by idprod order by sum(cantidad) desc limit 1)
) and fecha>= fi and fecha<= ft ;
return pmv;
end//

call prodmasvendido("2013-01-01", "2013-01-07");

También podría gustarte