Professional Documents
Culture Documents
CALL pa_actores_lista();
Delimitadores
Nmero de actores, usando variables y delimitadores:
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;
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 ;
Detalles
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
Una insercin:
USE videoteca;
CALL pa_actor_insertar(
'Tim','Robbins','nm0000209');
Lista de actores:
USE videoteca;
CALL pa_actores_lista();
Vistas
USE videoteca;
SELECT
a.id,
a.nombre,
a.apellidos,
ae.imdb
FROM
actor a
JOIN actor_ext ae ON a.id = ae.idactor;
Vista con el mismo objetivo:
USE videoteca;
Uso de la vista:
USE videoteca;
SELECT * FROM v_actor;
Modificacin
Llamada a una vista incluyendo ordenacin:
USE videoteca;
SELECT
*
FROM
v_actor
ORDER BY
apellidos, nombre;
Detalles
USE videoteca;
SHOW CREATE VIEW v_actor;
De otra forma:
USE videoteca;
DELIMITER //
CREATE TRIGGER dc_actor_insertar
AFTER INSERT ON actor
FOR EACH ROW BEGIN
END
//
DELIMITER ;
Insercin de un nuevo actor:
USE videoteca;
INSERT INTO actor(nombre, apellidos)
VALUES('Tim','Robins');
Desencadenador de actualizacin
USE videoteca;
DELIMITER //
CREATE TRIGGER dc_actor_actualizar
AFTER UPDATE ON actor
FOR EACH ROW BEGIN
UPDATE
actor_ext
SET
carpeta = nuevo_carpeta
WHERE
idactor = NEW.id;
END
//
DELIMITER ;
Cambiar el nombre del actor:
USE videoteca;
UPDATE
actor
SET
apellidos = 'Robbins'
WHERE
id = 3;
Borrado
USE videoteca;
DELIMITER //
CREATE TRIGGER dc_actor_eliminar
BEFORE DELETE ON actor
FOR EACH ROW BEGIN
DELETE FROM
actor_ext
WHERE
idactor = OLD.id;
END
//
DELIMITER ;
Borrar un actor:
USE videoteca;
DELETE FROM actor WHERE id = 3;