Вы находитесь на странице: 1из 8

Creacin 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
USE videoteca;
CREATE PROCEDURE pa_actores_lista()
SELECT
*
FROM
actor;

Para ejecutar el procedimiento almacenado:


USE videoteca;
CALL pa_actores_lista();

USE videoteca;
CREATE PROCEDURE pa_actores_cantidad()
SELECT
COUNT(*)
FROM
actor;

Delimitadores
USE videoteca;
DELIMITER //
CREATE PROCEDURE pa_actores_cantidad2()
BEGIN
DECLARE actores INT;
SELECT
COUNT(*)
FROM
actor
INTO
actores;
SELECT actores;
END
//
DELIMITER ;

Parmetros
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, tambin se necesita el nmero 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 nmero de actores:


SELECT @cantidad;

Funciones almacenadas
Nmero 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 funcin almacenada:


USE videoteca;
SELECT fa_actores_cantidad();

Eliminacin de un procedure
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 de procedures
Obtencin del cdigo de un procedimiento almacenado
existente:
USE videoteca;
SHOW CREATE PROCEDURE pa_actores_lista;

Respuesta ms 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


Insercin 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 insercin:
USE videoteca;
CALL pa_actor_insertar(
'Tim','Robbins','nm0000209');

Lista de actores:
USE videoteca;
CALL pa_actores_lista();

Вам также может понравиться