Guía Práctica MySQL: Procedimientos almacenados
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
Publicar un comentario