CREATE TRIGGER

Nombre

CREATE TRIGGER  --  Crea un nuevo disparador

Synopsis

CREATE TRIGGER name
  { BEFORE | AFTER } { event
  [OR ...] } ON table
  FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE
  ER">funcBLE>
  ( arguments )

Entradas

name

El nombre de un disparador existente.

table

El nombre de una tabla.

event

Uno entre INSERT, DELETE o UPDATE.

funcname

Una funci�n suministrada por el usuario.

Salidas

CREATE

Se devuelve este mensaje si el disparador se ha creado con �xito.

Descripci�n

CREATE TRIGGER introducir� un nuevo disparador en la base de datos actual. El disparador se asociar� con la relaci�n relname y ejecutar� la funci�n especificada funcname.

Se puede especificar que el disparador se dispare de cualquiera de estas dos formas: antes (BEFORE) de que la operaci�n sea intentada en un registro (antes de que las restricciones se comprueben y INSERT, UPDATE o DELETE sean intentados) o despu�s (AFTER) de que la operaci�n haya sido intentada (por ejemplo despu�s de que las restricciones sean comprobadas y de que INSERT, UPDATE o DELETE hayan sido completados). Si el disparador se pone en marcha antes del evento, �ste puede saltar la operaci�n para el registro actual o cambiar el registro que estaba insert�ndose (s�lo para las operaciones INSERT y UPDATE). Si el disparador se dispara despu�s del evento, todos los cambios, incluyendo la �ltima inserci�n, actualizaci�n o borrado, son "visibles" para el disparador.

Refi�rase a los cap�tulos de SPI y Triggers en la gu�a PostgreSQL Programmer's Guide para m�s informaci�n.

Notas

CREATE TRIGGER es una extensi�n del lenguaje Postgres.

S�lo el propietario relacionado puede crear un disparador en esta relaci�n.

Hasta la versi�n actual (v6.4), las sentencias de disparadores no est�n implementadas.

Refi�rase a DROP TRIGGER para obtener informaci�n sobre como borrar disparadores.

Uso

Comprueba si el c�digo de distribuidor especificado existe en la tabla de distribuidores antes de a�adir o actualizar una fila en los films de la tabla:

CREATE TRIGGER if_dist_exists
    BEFORE INSERT OR UPDATE ON films FOR EACH ROW
    EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
   

Antes de cancelar un distribuidor o de actualizar su c�digo, borra cada referencia en los films de la tabla:

CREATE TRIGGER if_film_exists 
    BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
    EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');
   

Compatibilidad

SQL92

No hay CREATE TRIGGER en SQL92.

El segundo ejemplo explicado ateriormente puede implementarse tambi�n usando una restricci�n de FOREIGN KEY (clave for�nea) como en:

CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40),
    CONSTRAINT if_film_exists
    FOREIGN KEY(did) REFERENCES films
    ON UPDATE CASCADE ON DELETE CASCADE  
);
    

En cualquier caso, las claves for�neas todav�a no est�n implementadas (hasta la versi�n 6.5) en Postgres.