Versión reducida de la base de datos de ejemplo[]
Creación de la base de datos:
DROP DATABASE IF EXISTS videoteca; CREATE DATABASE videoteca;
Tabla de actores:
USE videoteca; DROP TABLE IF EXISTS actor; CREATE TABLE actor ( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nombre VARCHAR(64) NOT NULL, apellidos VARCHAR(64) NOT NULL, imdb VARCHAR(32) NOT NULL DEFAULT '', PRIMARY KEY(id) ) ENGINE = InnoDB;
Registro de prueba:
USE videoteca; INSERT INTO actor(nombre, apellidos, imdb) VALUES('Harrison', 'Ford', 'nm0000148'); INSERT INTO actor(nombre, apellidos, imdb) VALUES('Russell', 'Crowe', 'nm0000128');
Lista de actores[]
En su versión más simple:
USE videoteca; CREATE PROCEDURE pa_actores_lista() SELECT * FROM actor;
Para ejecutar el procedimiento almacenado:
USE videoteca; CALL pa_actores_lista();
Número de registros en la tabla de actores[]
USE videoteca; CREATE PROCEDURE pa_actores_cantidad() SELECT COUNT(*) FROM actor;
Delimitadores[]
Número de actores, usando variables y delimitadores:
USE videoteca; DELIMITER // CREATE PROCEDURE pa_actores_cantidad2() BEGIN DECLARE actores INT; SELECT COUNT(*) FROM actor INTO actores; SELECT actores; END // DELIMITER ;
Parámetros[]
Lista de actores cuyo nombre comienza con una determinada letra:
USE videoteca; CREATE PROCEDURE pa_actores_buscar(letra CHAR(2)) SELECT * FROM actor WHERE nombre LIKE letra;
Actores cuyo nombre comienza con la letra h:
USE videoteca; CALL pa_actores_buscar('h%');
Ahora, también se necesita el número de actores localizados:
USE videoteca; DELIMITER // CREATE PROCEDURE pa_actores_buscar2( IN letra CHAR(2), OUT actores INT ) BEGIN SELECT * FROM actor WHERE nombre LIKE letra; SELECT COUNT(*) INTO actores FROM actor WHERE nombre LIKE letra; END // DELIMITER ;
Llamada a este procedimiento:
USE videoteca; CALL pa_actores_buscar2('h%', @cantidad);
Obtener el número de actores:
SELECT @cantidad;
Funciones almacenadas[]
Número de actores:
USE videoteca; DELIMITER // CREATE FUNCTION fa_actores_cantidad() RETURNS INT BEGIN DECLARE actores INT; SELECT COUNT(*) INTO actores FROM actor; RETURN actores; END // DELIMITER ;
Llamada a la función almacenada:
USE videoteca; SELECT fa_actores_cantidad();
Eliminación[]
Eliminar un procedimiento almacenado y crearlo de nuevo:
USE videoteca; DROP PROCEDURE IF EXISTS pa_actores_lista; CREATE PROCEDURE pa_actores_lista() SELECT * FROM actor ORDER BY apellidos, nombre;
Detalles[]
Obtención del código de un procedimiento almacenado existente:
USE videoteca; SHOW CREATE PROCEDURE pa_actores_lista;
Respuesta más ordenada:
USE videoteca; SHOW CREATE PROCEDURE pa_actores_lista\G
Detalles de un procedimiento almacenado:
USE videoteca; SHOW PROCEDURE STATUS LIKE 'pa_actores_lista'\G
Detalles de todos los procedimientos almacenados:
USE videoteca; SHOW PROCEDURE STATUS\G
Procedimientos almacenados activos[]
Inserción de un nuevo actor:
USE videoteca; CREATE PROCEDURE pa_actor_insertar( nuevo_nombre VARCHAR(64), nuevo_apellidos VARCHAR(64), nuevo_imdb VARCHAR(32) ) INSERT INTO actor( nombre, apellidos, imdb ) VALUES( nuevo_nombre, nuevo_apellidos, nuevo_imdb );
Una inserción:
USE videoteca; CALL pa_actor_insertar( 'Tim','Robbins','nm0000209');
Lista de actores:
USE videoteca; CALL pa_actores_lista();