| Documentation PostgreSQL 7.2 | ||
|---|---|---|
| <<< Previous | Next >>> | |
CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }
ON table FOR EACH { ROW | STATEMENT }
EXECUTE PROCEDURE func ( arguments )
|
CREATE TRIGGER entrera un nouveau déclencheur dans la base. Le déclencheur sera associé à la relation table et exécutera la fonction spécifiée func.
Le déclencheur peut être spécifié soit pour démarrer AVANT que l'opération soit tentée sur un tuple (avant que les contraintes soient vérifiées et les INSERT, UPDATE ou DELETE soient tentés) ou APRÉS que les opérations aient été tentées (ex., après que les contraintes soient vérifiées et les INSERT, UPDATE ou DELETE soient complétés). Si le déclencheur s'exécute avant l'événement, le déclencheur peut sauter l'opération pour le tuple courant ou changer le tuple étant inséré (pour les opérations INSERT et UPDATE seulement). Si le déclencheur s'exécute après l'événement, tous les changements, incluant la dernière insertion, mise à jour ou suppression, sont "visibles" par le déclencheur.
SELECT ne modifie aucune ligne, aussi vous ne pouvez pas créer de déclencheurs SELECT. Les règles et les vues sont plus appropriées dans certains cas.
Voir les chapitres sur SPI et les déclencheurs du Guide du programmeur PostgreSQL pour plus d'information.
Pour créer un déclencheur sur une table, l'utilisateur doit avoir les droits de TRIGGER sur la table.
Dans cette version, les déclencheurs STATEMENT ne sont pas implémentés.
Voir la commande DROP TRIGGER pour savoir comment supprimer des déclencheurs.
Vérifie si le code distributeur spécifié existe dans les tables distributeurs avant de rejouter ou de mettre à jour une ligne dans la table films :
CREATE TRIGGER if_dist_exists
BEFORE INSERT OR UPDATE ON films FOR EACH ROW
EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did'); |
Avant d'annuler un distributor ou de mettre à jour son code, supprime chaque référence à la table films :
CREATE TRIGGER if_film_exists
BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did'); |
Le second exemple peut aussi être réalisé en utilisant une clé étrangère, contrainte comme dans :
CREATE TABLE distributors (
did DECIMAL(3),
name VARCHAR(40),
CONSTRAINT if_film_exists
FOREIGN KEY(did) REFERENCES films
ON UPDATE CASCADE ON DELETE CASCADE
); |
Il n'y a pas d'instruction CREATE TRIGGER en SQL92.
L'instruction CREATE TRIGGER dans PostgreSQL implémente un sous-ensemble du standard SQL99. Les fonctionnalités suivantes sont manquantes :
SQL99 allows triggers to fire on updates to specific columns (e.g., AFTER UPDATE OF col1, col2).
SQL99 vous permet de définir des alises pour les "anciennes" et les "nouvelles" lignes ou tables pour leur utilisation dans la définition d'une action déclenchée (ex., CREATE TRIGGER ... ON tablename REFERENCING OLD ROW AS somename NEW ROW AS othername ...). PostgreSQL admet que les procédures soient écrites en diverses formes de langages utilisateurs, languages, l'accès aux données est maintenu dans un langage spécifique.
PostgreSQL ne possède que des déclencheurs niveau-ligne, pas de déclencheurs au niveau-instruction.
PostgreSQL permet seulement l'exécution d'une procédure stockée pour l'action déclencheur. SQL99 admet l'exécution d'un nombre d'autres commandes SQL, comme CREATE TABLE comme action déclencheur. Cette limitation n'est pas difficile à contourner en créant une procédure stockée qui exécute ces commandes.
| [1] | NdT. Un déclencheur est un mécanisme permettant d'activer une procédure cataloguée lors de l'apparition de conditions particulières dans la base de données. |
| <<< Previous | Home | Next >>> |
| CREATE TABLE AS | Up | CREATE TYPE |