Está en la página 1de 7

PROCEDIMIENTOS

ALMACENADOS EN MYSQL
José Antonio Horta Alonso
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 Editar

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 Editar
USE videoteca;

CREATE PROCEDURE pa_actores_cantidad()

SELECT
COUNT(*)
FROM
actor;

Delimitadores Editar

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 Editar

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 Editar

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 Editar

Eliminar datos de una tabla en un procedimiento almacenado

USE videoteca;

DELIMITER //

CREATE PROCEDURE pa_actores_eliminar()


BEGIN

DELETE FROM videoteca

END
//
DELIMITER ;

Detalles Editar

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 Editar

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

Categorías:

También podría gustarte