Acerca de los disparadores
Un disparador es una unidad PL/SQL que se almacena en la base de datos y (si está en el estado activado) se ejecuta automáticamente ("arranca") en respuesta a un evento especificado.
Un disparador tiene la siguiente estructura:
TRIGGER trigger_name
triggering_event
[ trigger_restriction ]
BEGIN
triggered_action;
END;
El trigger_name debe ser único para los disparadores en el esquema. Un disparador puede tener el mismo nombre que otro tipo de objeto en el esquema (por ejemplo, una tabla); sin embargo, Oracle recomienda el uso de una regla de nomenclatura que evite la confusión.
Si el disparador está en el estado activado, triggering_event hace que la base de Datos ejecute trigger_action si trigger_restriction es TRUE u se omite. El triggering_event se asocia a una tabla, una vista, un esquema o a la base de Datos y es uno de los siguientes:
-
Sentencia DML (se describe en "About Data Manipulation Language (DML) Statements")
-
Sentencia DDL (se describe en "Acerca de las Sentencias de Lenguaje de Definición De Datos (DDL)")
-
Operación de base de datos (SERVERERROR, LOGON, LOGOFF, STARTUP o SHUTDOWN)
Si el disparador está en el estado desactivado, triggering_event no hace que la base de Datos ejecute trigger_action, incluso si trigger_restriction es TRUE u se omite.
Por defecto, un disparador se crea en el estado activado. Puede desactivar un disparador activado y activar un disparador desactivado.
A diferencia de un subprograma, un disparador no se puede invocar directamente. Un disparador sólo puede ser invocado por su evento disparador, que puede ser provocado por cualquier usuario o aplicación. Puede que no sea consciente de que un disparador se está ejecutando, a menos que cause un error que no se maneje correctamente.
Un disparador simple puede arrancar exactamente en uno de estos puntos de temporización:
-
Antes de la ejecución del evento disparador (disparador BEFORE de nivel de sentencia)
-
Después de que se ejecuta el evento disparador (disparador a nivel de sentencia AFTER)
-
Antes de cada fila que afecta el evento (disparador BEFORE de nivel de fila)
-
Tras cada fila que afecta el evento (disparador AFTER a nivel de fila)
Un disparador compuesto puede arrancar en varios puntos en temporización. Para obtener información sobre los disparadores compuestos, consulte Referencia del lenguaje PL/SQL de Oracle Database.
Un disparador INSTEAD OF se define en una vista y su evento disparador es una sentencia DML. En lugar de ejecutar la sentencia DML, Oracle Database ejecuta el disparador INSTEAD OF. Para obtener más información, consulte "Creación de un Disparador INSTEAD OF".
Un disparador de sistema se define en un esquema o la base de datos. Un disparador definido en un esquema arranca para cada evento asociado al propietario del esquema (el usuario actual). Un disparador definido en una base de datos arranca para cada evento asociado a todos los usuarios.
Uno de los usos que se hace de los disparadores es exigir que las reglas de negocio se apliquen a todas las aplicaciones cliente. Por ejemplo, supongamos que la información agregada a la tabla EMPLOYEES debe tener un formato determinado y que muchas aplicaciones cliente pueden agregar datos a esta tabla. Un disparador en la tabla puede asegurar el formato adecuado de todos los datos agregados a ella. Puesto que el disparador se ejecuta siempre que algún cliente agregue datos a la tabla, ningún cliente puede obviar las reglas, y el código que fuerza estas reglas se puede almacenar y mantener sólo en el disparador, en lugar de en cada aplicación cliente. Para otros usos de disparadores, consulte Referencia de lenguaje PL/SQL de Oracle Database.
Consulte también: Referencia de lenguaje PL/SQL de Oracle Database para obtener información completa sobre los disparadores