CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE ER">funcBLE> ( arguments )
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.
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.
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');
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.