Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 38. PL/Tcl - Langage de proc�dures Tcl | Avance rapide | Suivant |
Les proc�dures pour d�clencheurs peuvent �tre �crites en PL/Tcl. PostgreSQL requiert qu'une proc�dure, devant �tre appel�e en tant que d�clencheur, doit �tre d�clar�e comme une fonction sans arguments et retourner une valeur de type trigger.
L'information du gestionnaire de d�clencheur est pass�e au corps de la proc�dure avec les variables suivantes :
Nom du d�clencheur provenant de l'instruction CREATE TRIGGER.
L'identifiant objet de la table qui est � la cause du lancement du d�clencheur.
Une liste Tcl des noms des colonnes de la table, pr�fix�e avec un
�l�ment de liste vide. Donc, rechercher un nom de colonne dans la liste
avec la commande lsearch
de Tcl renvoie le
num�ro de l'�l�ment, en commen�ant � 1 pour la premi�re colonne, de la
m�me fa�on que les colonnes sont num�rot�es personnellement avec
PostgreSQL.
La cha�ne BEFORE ou AFTER suivant le type d'appel du d�clencheur.
La cha�ne ROW ou STATEMENT suivant le type d'appel du d�clencheur.
La cha�ne INSERT, UPDATE ou DELETE suivant le type d'appel du d�clencheur.
Un tableau associatif contenant les valeurs de la nouvelle ligne de la table pour les actions INSERT ou UPDATE ou vide pour DELETE. Le tableau est index� par nom de colonne. Les colonnes nulles n'apparaissent pas dans le tableau.
Un tableau associatif contenant les valeurs de l'ancienne ligne de la table pour les actions UPDATE or DELETE ou vide pour INSERT. Le tableau est index� par nom de colonne. Les colonnes nulles n'apparaissent pas dans le tableau.
Une liste Tcl des arguments de la proc�dure ainsi que l'instruction CREATE TRIGGER. Ces arguments sont aussi accessibles par $1 ... $n dans le corps de la proc�dure.
Le code de retour d'une proc�dure d�clencheur peut �tre faite avec une des cha�nes OK ou SKIP ou une liste renvoy�e par la commande Tcl array get. Si la valeur de retour est OK, l'op�ration (INSERT/UPDATE/DELETE) qui a lanc� le d�clencheur continuera normalement. SKIP indique au gestionnaire de d�clencheurs de supprimer silencieusement l'op�ration pour cette ligne. Si une liste est renvoy�e, elle indique � PL/Tcl de renvoyer la ligne modifi�e au gestionnaire de d�clencheurs qui l'ins�rera au lieu de celle donn�es par $NEW (ceci fonctionne seulement pour INSERT et UPDATE). Inutile de dire que tout ceci est vraiment significatif lorsque le d�clencheur est BEFORE et FOR EACH ROW ; sinon le code de retour est ignor�.
Voici un petit exemple de proc�dure d�clencheur qui force une valeur enti�re dans une table pour garder trace du nombre de mises � jour r�alis�es sur la ligne. Pour les nouvelles lignes ins�r�es, la valeur est initialis�e � 0 puis incr�ment�e � chaque op�ration de mise � jour.
CREATE FUNCTION trigfunc_modcount() RETURNS trigger AS ' switch $TG_op { INSERT { set NEW($1) 0 } UPDATE { set NEW($1) $OLD($1) incr NEW($1) } default { return OK } } return [array get NEW] ' LANGUAGE pltcl; CREATE TABLE mytab (num integer, description text, modcnt integer); CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab FOR EACH ROW EXECUTE PROCEDURE trigfunc_modcount('modcnt');
Notez que la proc�dure d�clencheur elle-m�me ne conna�t pas le nom de la colonne ; c'est fourni avec les arguments du d�clencheur. Ceci permet � la proc�dure d�clencheur d'�tre r�-utilis�e avec diff�rentes tables.
Pr�c�dent | Sommaire | Suivant |
Acc�s � la base de donn�es depuis PL/Tcl | Niveau sup�rieur | Les modules et la commande unknown |