3.- Explique ¿Qué entiende usted por Disparadores (Triggers)?. Y escriba un ejemplo utilizando Lenguaje PL/SQL (plpgsql, en caso de PostgreeSQL).

Publicar nuevo tema   Responder al tema

Ver el tema anterior Ver el tema siguiente Ir abajo

3.- Explique ¿Qué entiende usted por Disparadores (Triggers)?. Y escriba un ejemplo utilizando Lenguaje PL/SQL (plpgsql, en caso de PostgreeSQL).

Mensaje  enrique bello100 el Mar Nov 22, 2016 7:58 am

CONCEPTO Y EJEMPLO DE USO Y CREACIÓN DE DISPARADORES (TRIGGERS) EN ORACLE


Un disparador define una acción que la base de datos debe llevar a cabo cuando se produce algún suceso relacionado con la misma. Los disparadores (triggers) pueden utilizarse para completar la integridad referencial, también para imponer reglas de negocio complejas o para auditar cambios en los datos. El código contenido en un disparador, denominado cuerpo del disparador, está formado por bloques PL/SQL. La ejecución de disparadores es transparente al usuario.

Para crear un disparador (trigger) en una tabla, el usuario con el que accedamos a Oracle deberá ser propietario de la misma, teniendo así el privilegio ALTER para la tabla ó ALTER ANY TABLE. Además, dicho usuario, debe disponer del privilegio CREATE TRIGGER.

Existen varios tipos de disparadores, dependiendo del tipo de transacción de disparo y el nivel en el que se ejecuta el disparador (trigger):

1.- Disparadores de nivel de fila: se ejecutan una vez para cada fila afectada por una instrucción DML. Los disparadores de nivel de fila se crean utilizando la cláusula for each row en el comando create trigger.

2.- Disparadores de nivel de instrucción: se ejecutan una vez para cada intrucción DML. Por ejemplo, si una única intrucción INSERT inserta 500 filas en una tabla un disparador de nivel de instrucción para dicha tabla sólo se ejecutará una vez. Los disparadores de nivel de instrucción son el tipo predeterminado que se crea con el comando create trigger.

3.- Disparadores Before y After: puesto que los disparadores son ejecutados por sucesos, puede establecerse que se produzcan inmediatamente antes (before) o después (after) de dichos sucesos.

4.- Disparadores Instead Of: puede utilizar INSTEAD OF para indicar a Oracle lo que tiene que hacer en lugar de realizar las acciones que invoca el disparador. Por ejemplo, podría usar un disparador INSTEAD OF en una vista para gestionar las inserciones en una tabla o para actualizar múltiples tablas que son parte de una vista.

5.- Disparadores de esquema: puede crear disparadores sobre operaciones en el nivel de esquema tales como create table, alter table, drop table, audit, rename, truncate y revoke. Puede incluso crear disparadores para impedir que los usuarios eliminen sus propias tablas. En su mayor parte, los disparadores de nivel de esquema proporcionan dos capacidades: impedir operaciones DDL y proporcionar una seguridad adicional que controle las operaciones DDL cuando éstar se producen.

6.- Disparadores en nivel de base de datos: puede crear disparadores que se activen al producirse sucesos de la base de datos, incluyendo errores, inicios de sesión, conexiones y desconexiones. Puede utilizar este tipo de disparador para automatizar el mantenimiento de la base de datos o las acciones de auditoría.

EJEMPLO DE CREACIÓN DE TRIGGER (DISPARADOR) DE NIVEL DE FILA

1.- En primer lugar abriremos la Consola de Oracle Enterprise Manager:

seleccionaremos "Iniciar en Modo Autónomo" y pulsaremos en "Aceptar":


Selecionaremos la Base de Datos del árbol e introduciremos un usuario y contraseña con permisos suficientes para crear trigger en la tabla de ejemplo (en nuestro caso accederemos como "system"):


2.- En el árbol accederemos a "Esquema" y a continuación seleccionaremos el usuario propietario de la tabla en la que crearemos el trigger, en nuestro caso "ALONSO". Después pulsaremos en "Tablas", seleccioremos la tabla a la que queramos aplicarle el disparador y, sobre la carpeta "Disparadores" pulsaremos con el botón derecho del ratón, nos aparecerá un menú emergente, pulsaremos "Crear...":


3.- En "Nombre" introduciremos el nombre del disparador y en "Cuerpo del Disparador" introduciremos el código PL/SQL que queramos que se ejecute, en nuestro caso queremos que el disparador añada un registro otra tabla llamada "resultadodisparador" cuando el valor que introduzca el usuario en el campo CAMPO2 de la tabla PRUEBA (después de insertar una nueva fila) sea superior a 1000:


En la pestaña "Evento" de la ventana de "Crear Disparador" marcaremos "Disparador en Tabla", marcaremos "Después" y marcaremos también en "Arrancar Disparador:" "Insertar":


Pulsaremos en "Crear" y, si no ha habido errores el el código PL/SQL nos aparecerá un mensaje como este "Disparador se ha creado correctamente":


Nota: también se pueden crear disparadores sin necesidad de utilizar la interfaz gráfica (Consola de Oracle Enterprise Manager). Se pueden crear mediante SQL. La consulta SQL que crea el disparador anterior es la siguiente:

CREATE OR REPLACE TRIGGER "ALONSO"."INSERCIONNUMEROMAYOR1000" AFTER
INSERT ON "ALONSO"."PRUEBA" FOR EACH ROW WHEN (new.CAMPO2 > 1000)
BEGIN
insert into resultadodisparador (fecha, aviso, tabla)
values
(Sysdate, 'Registro con CAMPO2 superior a 1000',
'PRUEBA');
END;

Con este disparador, cuando un usuario inserte un registro en la tabla PRUEBA cuyo CAMPO2 tenga un valor superior a 1000 se insertará automáticamente (transparente para el usuario) otro registro en la tabla "resultadodisparador" con la fecha de la inserción (sysdate), el aviso "Registro con CAMPO2 superior a 1000" y el nombre de la tabla origen del disparador "PRUEBA".

Obviamente, para que este disparador funcione correctamente deberán existir las tablas PRUEBA (origen del disparador) y "resultadodisparador" (donde se insertará el registro si se cumple la condición CAMPO2 > 1000.

La consulta SQL necesaria para crear la tabla "PRUEBA":

CREATE TABLE "ALONSO"."PRUEBA" (
"CAMPO1" VARCHAR2(10) NOT NULL,
"CAMPO2" NUMBER)

La consulta SQL necesaria para crear la tabla "resultadodisparador":

CREATE TABLE "ALONSO"."RESULTADODISPARADOR" ("FECHA" DATE NOT
NULL, "AVISO" VARCHAR2(100) NOT NULL, "TABLA" VARCHAR2(50)
NOT NULL)

En nuestro ejemplo estamos trabajando en todo momento utilizando el usuario ALONSO para la creación del disparador y de las tablas, puesto que es el propietario de dichos objetos.

INTEGRANTES DEL EQUIPO:
ENRIQUE ECHEVERRIA BELLO
IRVING BUSTOS ORTEGA
RAMIRO LUCIANO GAMA
IRVING MARTINEZ GONZALES
KEVIN BAHENA TRUJILLO
JENNIFER GIORNERY OREGON PEREZ

enrique bello100

Mensajes : 13
Fecha de inscripción : 23/02/2015

Ver perfil de usuario

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
Puedes responder a temas en este foro.