Enreas
Registrarse
Advertisement

Enlaces[]

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 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 datos de una tabla en un procedimiento almacenado

USE videoteca;

DELIMITER //

CREATE PROCEDURE pa_actores_eliminar()
BEGIN

DELETE FROM videoteca;

END;

//
DELIMITER ;

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