Guía Práctica MySQL: Procedimientos almacenados

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 INT 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();

También puedes encontrar ejemplo sobre mantenedores con procedimientos almacenados en: Mantenedor de una Tabla con Mysql

No olvides dejar tus comentarios, serán de gran apoyo para nuestra asociación y al crecimiento por su aceptación.

Comentarios

Entradas populares de este blog

Practica de Diagrama de Flujo Intermedio - Resueltos

Personaliza tus reportes PDF desde PHP con la librería FPDF

Ejercicios Básicos para aprender a programar en Android Studio [Java y Kotlin]