You are on page 1of 5

[STORED PROCEDURES EN MYSQL-DEVILBOY] 27 de mayo de 2011

STORED PROCEDURES Bueno en este tutorial intentar explicar que es un Procedimiento Almacenado. Definicin Segn la wiki: Un procedimiento almacenado (stored procedure en ingls) es un programa (o procedimiento) el cual es almacenado fsicamente en una base de datos. Su implementacin vara de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una peticin de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y slo necesita enviar sus resultados de regreso al usuario, deshacindose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes. Usos tpicos para procedimientos almacenados incluyen la validacin de datos siendo integrados a la estructura de base de datos (los procedimientos almacenados utilizados para este propsito a menudo son llamados disparadores; triggers en ingls), o encapsular un proceso grande y complejo. El ltimo ejemplo generalmente ejecutar ms rpido como un procedimiento almacenado que de haber sido implementado como, por ejemplo, un programa corriendo en el sistema cliente y comunicndose con la base de datos mediante el envo de consultas SQL y recibiendo sus resultados. Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lgica de la aplicacin en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lgica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creacin y, particularmente, el mantenimiento de los programas involucrados.

Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operacin en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello podemos utilizar a los Procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a travs de los procedimientos almacenados.

En pocas palabras un stored procedure (SP) es un programa (script) con sentencias sql que se ejecuta en la base de datos. Para que tengan otra idea de lo que es, imaginen una funcin o mtodo en programacin.

[STORED PROCEDURES EN MYSQL-DEVILBOY] 27 de mayo de 2011


Creando nuestro primer Stored Procedure (SP) Antes de otra cosa creemos una nueva base de datos para hacer nuestros ejercicios: Create database sp; Use sp; CREATE TABLE alumnos (idAlumno INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(50), apellido VARCHAR(30)); CREATE TABLE profesores (idProfesor INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(50), apellido VARCHAR(30)); INSERT INTO alumnos VALUES('','pepe','pecas'); INSERT INTO alumnos VALUES('','juan','el toro'); INSERT INTO profesores VALUES('','juan','alejandro'); INSERT INTO profesores VALUES('','carlos','perez'); Lo que hicimos fue crear una base de datos llamada SP y creamos dos tablas llamas alumnos y profesores con solo 3 campos: id, nombre y apellido. Adems ingresamos 2 usuarios a la tabla alumnos y profesores. Ahora creremos nuestro primer SP: DELIMITER// CREATE PROCEDURE listar() BEGIN SELECT * FROM alumnos; END// DELIMITER; Delimiter// nos sirve para cambiar la forma de terminacin de nuestras sentencias SQL de; por // Esto nos sirve por si tenemos ms de una sentencia SQL en nuestro SP La siguiente lnea sirve para crear y darle nombre a nuestro SP, en este caso el nuestro se llama listar y necesita llevar parntesis (). Con la palabra reservada BEGIN le indicamos donde inicia y con END donde termina nuestro SP.

[STORED PROCEDURES EN MYSQL-DEVILBOY] 27 de mayo de 2011


Todas las sentencias SQL se deben de hacer dentro de este bloque y deben de ir finalizadas por; En este caso solo mostramos todos los registros de la tabla alumnos. La palabra END debe de finalizar con el delimitador que establecimos con anterioridad, aqu se puede usar el que queramos por ejemplo $$, etc. Y en la ltima lnea regresamos el delimitador de // por; Ya tenemos creado nuestro primer SP, ahora para usarlo escribimos lo siguiente: CALL nombre_del_sp(); En este caso quedara as: CALL listar(); Y nos mostrar todos los registros de la tabla alumnos. USO DE PARAMETROS Veamos otro ejemplo con el mismo SP pero pasndole parmetros. Los parmetros sirven para hacer ms flexible y til a los SP. Existen 3 tipos de parmetros: IN: Que son los parmetros de entrada, sirven para ingresar informacin (La palabra IN es por defecto, as que si la omitimos no pasa nada). OUT: Parmetros de salida, sirven para extraer informacin INOUT: Muy obvio creo PARAMETROS IN (ENTRADA) DELIMITER// CREATE PROCEDURE listarNombre(nombreAlumno varchar(20)) BEGIN SELECT * FROM alumnos where nombre = nombreAlumno; END// Con esto pasamos un parmetro IN a nuestro SP, donde nos va a seleccionar todos los registros de la tabla alumnos donde nombre sea igual al parmetro. CALL listarNombre(pepe);

[STORED PROCEDURES EN MYSQL-DEVILBOY] 27 de mayo de 2011

PARAMETROS OUT (SALIDA) Veamos un ejemplo para entenderlo mejor DELIMITER $$

CREATE PROCEDURE salida(id INT,OUT nombreAlumno VARCHAR(20)) BEGIN SELECT nombre FROM alumnos WHERE idAlumno = id INTO nombreAlumno ; END$$ DELIMITER ; Y para llamarlo usamos: CALL salida(2,@nombre); Bueno y si se dan cuenta no pasa nada, no muestra el registro, lo que pasa es que hace falta mostrarlo y para eso usamos lo siguiente: SELECT @nombre; Aqu lo que hicimos fue pasarle un parmetro de entrada (IN) y regresar el resultado a la variable nombreAlumno(OUT). Esto es muy parecido a lo que hacemos al programar, cuando creamos una funcin o mtodo y usamos la palabra reservada return para regresar el resultado o un valor. PARAMETRO ENTRADA-SALIDA (INOUT) DELIMITER $$ CREATE PROCEDURE entradaSalida(INOUT variable VARCHAR(20)) BEGIN SELECT nombre FROM alumnos WHERE idAlumno = variable INTO variable; END$$ DELIMITER ;

[STORED PROCEDURES EN MYSQL-DEVILBOY] 27 de mayo de 2011

En este ejemplo solo usamos una variable para asignar un valor y extraer el resultado. Ahora cmo lo ejecutamos? SET @nombre = 2; CALL salida(@nombre); SELECT @nombre;

VARIABLES EN SP As como cuando programamos usamos variables, pues en los SP tambin se usan. Pongamos un ejemplo muy sencillo. DELIMITER $$ CREATE PROCEDURE variable() BEGIN DECLARE id INT; SET id = 1; SELECT * FROM alumnos WHERE idAlumno = id; END$$ DELIMITER ; Usando Declare asignamos el nombre y tipo de la variable y con set asignamos un valor a nuestra variable. Tambin es posible declarar e inicializar una variable de la siguiente forma: DECLARE id INT DEFAULT 1; Probamos nuestro SP hacienda un llamado a variable: CALL variable();