ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Trigger Procedimientos Almacenados En Oracle

mauriciofci6 de Febrero de 2013

3.157 Palabras (13 Páginas)1.051 Visitas

Página 1 de 13

APLICACIÓN A LA BASE DE DATOS

INFORME DE TRIGGER, PROCEDIMIENTOS ALMACENADOS Y CURSORES

Alumno:

 LENIN MAURICIO ANDALUZ GRANDA

Catedrático:

 ING. ROBERT MAREIRA

INTRODUCCION

Un "trigger" (disparador o desencadenador) es un bloque de código que se ejecuta automáticamente cuando ocurre algún evento (como inserción, actualización o borrado) sobre una determinada tabla (o vista); es decir, cuando se intenta modificar los datos de una tabla (o vista) asociada al disparador.

Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas; para registrar los cambios que se efectúan sobre las tablas y la identidad de quien los realizó; para realizar cualquier acción cuando una tabla es modificada; etc.

Si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla asociada a un disparador, el disparador se ejecuta (se dispara) en forma automática.

La diferencia con los procedimientos almacenados del sistema es que los triggers:

 no pueden ser invocados directamente; al intentar modificar los datos de una tabla asociada a un disparador, el disparador se ejecuta automáticamente.

 no reciben y retornan parámetros.

 son apropiados para mantener la integridad de los datos, no para obtener resultados de consultas.

Uso de los triggers

Los disparadores pueden emplearse para muchas cosas diferentes, incluyendo:

• El mantenimiento de restricciones de integridad complejas, que no sean posibles con las restricciones declarativas definidas en el momento de crear la tabla.

• La auditoría de la información contenida en una tabla, registrando los cambios realizados y la identidad del que los llevó a cabo.

• El aviso automático a otros programas de que hay que llevar a cabo una determinada acción, cuando se realiza un cambio en una tabla.

Sintaxis general de trigger

La sintaxis general para crear un disparador es:

Los triggers se crean con la instrucción "create trigger" seguido del nombre del disparador. Si se agrega "or replace" al momento de crearlo y ya existe un trigger con el mismo nombre, tal disparador será borrado y vuelto a crear.

"MOMENTO" indica cuando se disparará el trigger en relación al evento, puede ser BEFORE (antes), AFTER (después) o INSTEAD OF (en lugar de). "before" significa que el disparador se activará antes que se ejecute la operación (insert, update o delete) sobre la tabla, que causó el disparo del mismo. "after" significa que el trigger se activará después que se ejecute la operación que causó el disparo. "instead of" sólo puede definirse sobre vistas, anula la sentencia disparadora, se ejecuta en lugar de tal sentencia (ni antes ni después).

"EVENTO" especifica la operación (acción, tipo de modificación) que causa que el trigger se dispare (se active), puede ser "insert", "update" o "delete"; DEBE colocarse al menos una acción, puede ser más de una, en tal caso se separan con "or". Si "update" lleva una lista de atributos, el trigger sólo se ejecuta si se actualiza algún atributo de la lista.

"on NOMBRETABLA" indica la tabla (o vista) asociada al disparador;

"NIVEL" puede ser a nivel de sentencia o de fila. "for each row" indica que el trigger es a nivel de fila, es decir, se activa una vez por cada registro afectado por la operación sobre la tabla, cuando una sola operación afecta a varios registros. Los triggers a nivel de sentencia, se activan una sola vez (antes o después de ejecutar la operación sobre la tabla). Si no se especifica, o se especifica "statement", es a nivel de sentencia.

"CUERPO DEL DISPARADOR" son las acciones que se ejecutan al dispararse el trigger, las condiciones que determinan cuando un intento de inserción, actualización o borrado provoca las acciones que el trigger realizará. El bloque se delimita con "begin... end".

Entonces, un disparador es un bloque de código asociado a una tabla que se dispara automáticamente antes o después de una sentencia "insert", "update" o "delete" sobre la tabla.

Se crean con la instrucción "create trigger" especificando el momento en que se disparará, qué evento lo desencadenará (inserción, actualización o borrado), sobre qué tabla (o vista) y las instrucciones que se ejecutarán.

Los disparadores pueden clasificarse según tres parámetros:

 el momento en que se dispara: si se ejecutan antes (before) o después (after) de la sentencia.

 el evento que los dispara: insert, update o delete, según se ejecute una de estas sentencias sobre la tabla.

 nivel: dependiendo si se ejecuta para cada fila afectada en la sentencia (por cada fila) o bien una única vez por sentencia independientemente de la filas afectadas (nivel de sentencia).

Consideraciones generales:

- Las siguientes instrucciones no están permitidas en un desencadenador:

• create database

• alter database

• drop database

• load database

• restore database

• load log, reconfigure

• restore log

• disk init

• disk resize.

Se pueden crear varios triggers para cada evento, es decir, para cada tipo de modificación (inserción, actualización o borrado) para una misma tabla. Por ejemplo, se puede crear un "insert trigger" para una tabla que ya tiene otro "insert trigger".

Componentes de un disparador

Los componentes de un disparador son:

• el nombre

• el suceso de disparo

• el cuerpo.

• La cláusula WHEN es opcional.

Nombres de disparadores

El espacio de nombres para los disparadores es diferente del de otros subprogramas. El espacio de nombres es el conjunto de identificadores válidos que pueden emplearse como nombres de un objeto.

Los disparadores existen en un espacio de nombres separado del de los procedimientos, paquetes y tablas, por lo que un disparador puede tener el mismo nombre que una tabla o procedimiento. Sin embargo dentro de un mismo esquema deben tener nombres diferentes entre sí.

Tipos de disparadores

El suceso de disparo determina el tipo de disparador. Los disparadores pueden definirse para las operaciones INSERT, UPDATE o DELETE, y pueden dispararse antes o después de la operación. Finalmente, el nivel de los disparadores puede ser la fila o la orden.

Categoría Valores Comentarios

Orden INSERT, DELETE, UPDATE Define qué tipo de orden DML provoca la activación del disparador.

Temporización BEFORE o AFTER Define si el disparador se activa antes o después de que se ejecute la orden (disparador previo o posterior).

Nivel Fila u orden Los disparadores con nivel de fila se activan una vez por cada fila afectada por la orden que provocó el disparo. Los disparadores con nivel de orden se activan sólo una vez, antes o después de la orden. Los disparadores con nivel de fila se identifican por la cláusula FOR EACH ROW en la definición del disparador.

Los tipos de disparadores:

Aunque, puede haber muchos tipos y clasificaciones de los disparadores, básicamente, hay dos tipos de disparadores:

 Row Triggers (o Disparadores de fila): son aquellas que se ejecutaran n-veces si se llama n-veces desde la tabla asociada al trigger

 Statement Triggers (o Disparadores de secuencia): son áquellos que sin importar la cantidad de veces que se cumpla con la condición, su ejecución es única.

Cuando trabajamos con trigger a nivel de fila, Oracle provee de dos tablas temporales a las cuales se puede acceder, que contienen los antiguos y nuevos valores de los campos del registro afectado por la sentencia que disparó el trigger. El nuevo valor es ":new" y el viejo valor es ":old". Para referirnos a ellos debemos especificar su campo separado por un punto ":new.CAMPO" y ":old.CAMPO".

El acceso a estos campos depende del evento del disparador.

En un trigger disparado por un "insert", se puede acceder al campo ":new" únicamente, el campo ":old" contiene "null".

En una inserción se puede emplear ":new" para escribir nuevos valores en las columnas de la tabla.

En un trigger que se dispara con "update", se puede acceder a ambos campos. En una actualización, se pueden comparar los valores de ":new" y ":old".

En un trigger de borrado, unicamente se puede acceder al campo "old", ya que el campo ":new" no existe luego que el registro es eliminado, el campo ":new" contiene "null" y no puede ser modificado.

Los valores de "old" y "new"

...

Descargar como (para miembros actualizados) txt (22 Kb)
Leer 12 páginas más »
Disponible sólo en Clubensayos.com