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.