Listado completo de tutoriales
99 - Procedimientos almacenados (crear - ejecutar) |
Los procedimientos almacenados se crean en la base de datos seleccionada.
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 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 NOMBREPROCEDIMIENTO() begin INSTRUCCIONES; end
Con las siguientes instrucciones creamos un procedimiento almacenado llamado "pa_libros_limite_stock" que retorna todos los libros de los cuales hay menos de 10 disponibles:
create procedure pa_libros_limite_stock() begin select * from libros where stock<=10; end
Para llamar luego al procedimiento almacenado debemos utilizar la cláusula 'call' y seguidamente el nombre del procedimiento almacenado:
call pa_libros_limite_stock();
Como un procedimiento almacenado puede tener muchos comandos SQL entre las palabras claves begin y end debemos informar de alguna manera a MySQL que no ejecute dichos comandos. Para ello utilizamos el comando 'delimiter' cambiando el caracter ';' como fin de instrucción. Luego debemos codificar el procedimiento almacenado cambiando el delimitador con la siguiente sintaxis:
delimiter // create procedure pa_libros_limite_stock() begin select * from libros where stock<=10; end // delimiter ; call pa_libros_limite_stock();
Utilizamos el deliminador '//' como podría ser cualquier otro, por ejemplo '$':
delimiter $ create procedure pa_libros_limite_stock() begin select * from libros where stock<=10; end $ delimiter ; call pa_libros_limite_stock();
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL para probar un procedimiento almacenado:
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), stock int, primary key(codigo) ); insert into libros(titulo,autor,editorial,precio,stock) values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',20.00, 9); insert into libros(titulo,autor,editorial,precio,stock) values('Alicia en el pais de las maravillas','Lewis Carroll','Plaza',35.00, 50); insert into libros(titulo,autor,editorial,precio,stock) values('Aprenda PHP','Mario Molina','Siglo XXI',40.00, 3); insert into libros(titulo,autor,editorial,precio,stock) values('El aleph','Borges','Emece',10.00, 18); insert into libros(titulo,autor,editorial,precio,stock) values('Ilusiones','Richard Bach','Planeta',15.00, 22); insert into libros(titulo,autor,editorial,precio,stock) values('Java en 10 minutos','Mario Molina','Siglo XXI',50.00, 7); insert into libros(titulo,autor,editorial,precio,stock) values('Martin Fierro','Jose Hernandez','Planeta',20.00, 3); insert into libros(titulo,autor,editorial,precio,stock) values('Martin Fierro','Jose Hernandez','Emece',30.00, 70); insert into libros(titulo,autor,editorial,precio,stock) values('Uno','Richard Bach','Planeta',10.00, 120); drop procedure if exists pa_libros_limite_stock; delimiter // create procedure pa_libros_limite_stock() begin select * from libros where stock<=10; end // delimiter ; call pa_libros_limite_stock();
Genera una salida similar a esta:
Debemos presionar el botón izquierdo del mouse sobre "Stored Procedures" para la base de datos donde queremos crear el procedimiento almacenado:
Se nos crea un diálogo donde podemos codificar el procedimiento almacenado:
Luego de codificar el procedimiento almacenado presionamos el botón "Apply" y nos aparece un nuevo diálogo con el código final del procedimiento almacenado:
Una vez confirmado queda almacenado en la base de datos el nuevo procedimiento para que posteriormente lo podamos invocar con el comando 'call':
call st_libros_precios_bajos;