Está en la página 1de 31

Unidad 6

Procedimientos Almacenados y
Disparadores
Disparadores (Triggers)
Características
Los disparadores solo ocurren cuando se
presentan determinados eventos

Los tipos de eventos permitidos suelen ser


Insertar, Eliminar o Actualizar una tupla en
particular
Funcionamiento General
Se prueba una condición, si ésta no se
cumple, ninguna otra acción asociada al
disparador se produce en respuesta al
evento

Si se cumple la condición del disparador, el


sistema de administración de la base de
datos realiza la acción asociada a él
Características
La acción puede ejecutarse antes del evento
disparador, después de él, o en lugar de él

La acción puede referirse a valores


anteriores y nuevos que se insertaron,
eliminaron o actualizaron en el evento que
desencadenó la acción

Los eventos de actualización pueden


especificar un atributo particular o un
conjunto de atributos
Características
Una condición puede especificarse con una
cláusula WHEN, y la acción se ejecutará sólo
si se dispara la regla y se cumple la
condición cuando ocurre el evento que la
desencadenó

El programador tiene la opción de de


especificar que la acción se realiza:

 Una vez en cada tupla modificada


 Una vez en todas las tuplas que cambian en
una operación de la base de datos
Estructura Básica de un
Disparador (Trigger)
CREATE TRIGGER nombre_disp
momento_disp evento_disp

ON nombre_tabla FOR EACH ROW


sentencia_disp
Estructura
La primera sentencia, “CREATE TRIGGER
nombre_disp” creará el trigger

momento_disp se refiere a en que momento


se debe ejecutar la regla, las opciones
disponibles son:

 AFTER. La condición se prueba antes del evento


disparador

 BEFORE. La condición se prueba después de


que el evento disparador
Evento Disparador
Evento disparador indica la clase de
sentencia que activa el disparador, puede
ser INSERT, UPDATE o DELETE

No puede haber dos disparadores en una


misma tabla que correspondan al mismo
momento y sentencia

Por ejemplo, no se pueden tener dos


disparadores BEFORE UPDATE.

Pero sí es posible tener los disparadores


BEFORE UPDATE y BEFORE INSERT o BEFORE
Estructura
La frase FOR EACH ROW, expresa la
exigencia de que une Trigger se ejecute una
vez por cada tupla actualizada

La sentencia disparadora es la que se


ejecuta cuando se activa el disparador, las
sentencias deben colocarse entre BEGIN ...
END
Valores Nuevos o Viejos
Las columnas de la tabla asociada con el
disparador pueden referenciarse empleando
los alias OLD y NEW

OLD.nombre_col hace referencia a una


columna de una fila existente antes de ser
actualizada o borrada

NEW.nombre_col hace referencia a una


columna en una nueva fila a punto de ser
insertada, o en una fila existente luego de
que fue actualizada
Delimitadores
Cuando se escribe un trigger, se utiliza el
punto y como para finalizar sentencias, esto
puede causar ciertos errores, por eso es
conveniente crear un delimitador para que
no reconozca varios puntos y comas
normales como el fin del mismo

DELIMITER delimitador_deseado
DELIMITER $$
DELIMITER ; Vuelve a manejar punto y coma
como el delimitador
Manejo de Triggers
Listar los Triggers
 SHOW TRIGGERS;

Listar el código del Procedimiento


 SHOW CREATE TRIGGER nombre_trigger

Eliminar un Trigger
 DROP TRIGGER IF EXISTS nombre_trigger
Procedimiento Almacenado (Store
Procedure)
Definición
Un procedimiento almacenado o Stored
Procedure es un programa que se almacena
en una base de datos

Sus usos más comunes se relacionan con la


validación de de datos o encapsular un
proceso más grande

Su implementación depende del controlador


de bases de datos que se está utilizando
Ventajas
Pueden incrementar el desempeño de las
aplicaciones ya que en lugar de enviar
múltiples sentencias, solo envía una llamada
a un procedimiento que está almacenado

Pueden ser compartidos entre varias


aplicaciones

Ofrecen mayor seguridad ya que solamente


se tiene acceso a la llamada y no a las
sentencias de esta forma se pueden usar sin
tener conocimiento de la estructura de las
Desventajas
Entre más grande sea el procedimiento
almacenado más recursos del equipo
requiere

Puede ser complicado realizar, analizar o


modificar procedimientos complejos y
grandes
Delimitadores
Es necesario crear un delimitador para que
no se tome al punto y coma como
delimitador en cuanto al inicio y al final del
procedimiento

El funcionamiento es similar al de un


delimitador en los Disparadores (Triggers)
Creación de un Procedimiento
La sentencia básica para crear
procedimiento almacenado es:

CREATE PROCEDURE nombre()


BEGIN
END
Llamada a un Procedimiento
Para llamar a un procedimiento almacenado
se utiliza la sentencia CALL seguido del
nombre del procedimiento deseado

CALL nombreProcedimiento();
Variables en un Procedimiento
Almacenado
Para declarar una variable se utiliza la
sentencia:
DECLARE nombre TIPO_DATO (TAMAÑO)
DEFAULT valor_defecto;

Para asignar valores a una variable se utiliza


la siguiente sentencia: SET
SET nombre_variable = valor
Variables en un Procedimiento
Almacenado
Es posible usar la sentencia SELECT/INTO
para asignar un valor a una variable
previamente declarada

SELECT COUNT (*) INTO nombre_variable


FROM tabla
Acceso a una Variable
Se puede tener acceso a una variable dentro
del ámbito donde fue declarada, en este
caso dentro de las sentencias BEGIN y END

Se puede declarar una variable tipo de


sesión colocando la @ antes del nombre de
la variable
Parámetros en un
Procedimiento
Es posible manejar parámetros en un
procedimiento almacenado, se tienen tres
tipos de parámetros IN, OUT o INOUT

IN – El modo por defecto, cuando se declara


un parámetro como IN la llamada al
procedimiento debe pasarle este argumento

El valor del parámetro no se modifica incluso


si es alterado dentro del procedimiento
almacenado
Parámetros en un
Procedimiento
OUT – El valor de un parámetro declarado
con OUT puede ser modificado dentro del
procedimiento almacenado y es regresado a
la llamada al procedimiento

INOUT – Es la combinación de IN y OUT lo


que significa que el programa que hace la
llamada envía el argumento, y el
procedimiento puede modificarlo
Condicional IF
Para colocar sentencias condicionales se
tienen las instrucciones IF, ELSEIF, ELSE
siempre se debe comenzar con un IF y cerrar
con un END IF, en medio de ellas pueden ir
ELSEIF o ELSE, para indicar que comienza un
bloque de sentencias se utiliza la instrucción
THEN
Condicional CASE
Además de las sentencias IF, también se
cuenta con el condicional CASE
 CASE expresion
 WHEN valor_1 THEN comandos
 WHEN valor_2 THEN comandos
 WHEN valor_3 THEN comandos
 ELSE comandos
 END CASE;
Ciclo While
El ciclo WHILE se utiliza al igual que en otros
lenguajes de programación para repetir un
conjunto de instrucciones mientras se
cumpla una condición

WHILE expresion DO
Sentencias
END WHILE
Ciclo Repeat
El ciclo REPEAT es el equivalente al ciclo
DO/WHILE en otros lenguajes de
programación, aquí primero se ejecutan las
sentencias y posteriormente se pregunta si
la condición se cumple, por lo que la
instrucción se ejecutará al menos una vez.

REPEAT
Sentencias
UNTIL Expresion
END REPEAT
Loop, Leave, Iterate
La sentencia LOOP es equivalente a la
expresión GOTO en algunos lenguajes de
programación, en donde se puede indicar
que se vaya a una parte de código de
manera similar a un ciclo.
Los auxiliares LEAVE e ITERATE se pueden
colocar dentro de un ciclo LOOP para alterar
su funcionamiento

LEAVE es similar al funcionamiento de la


sentencia break en otros lenguajes de
programación
Manejo de Procedimientos
Listar los Procedimientos
 SHOW PROCEDURE STATUS WHERE
db='nombre_base_datos';

Listar el código del Procedimiento


 SHOW CREATE PROCEDURE
nombre_procedimiento

Eliminar un Procedimiento
 DROP PROCEDURE IF EXISTS
nombre_procedimiento

También podría gustarte