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.