Utilisation des Triggers DB2/400

BoTTom |    Changer de couleur
 
                             TRIGGERS 
 
 
 Définitions : 
 
 
 Un TRIGGER est un programme contenant un ensemble d'actions effectuées
  automatiquement quand une opération de modification est réalisée sur
  une table ou un fichier spécifique.
 
 L'opération de modification (TRIGGER EVENT) peut être une insertion,
  une mise à jour ou une suppression depuis un programme applicatif.
 
 Le moment d'appel du programme (TRIGGER TIME) peut se situer avant ou
  après l'opération de modification du fichier.
 
 Dans le cas d'une opération de mise à jour, l'appel du programme peut
  se faire soit toujours, soit uniquement en cas de modification d'une
  valeur (TRIGGER UPDATE CONDITION).
 
 


|    Changer de couleur
 
 Cas d'utilisation : 
 
 
 Les triggers peuvent être employés pour :
 
     - obliger au respect de règles internes
 
     - valider des données d'entrée
 
     - générer une valeur unique liée à un nouveau champ dans un autre
        fichier (fonction de substitution)
 
     - écrire dans un autre fichier pour conserver une trace
 
     - mettre à jour un fichier de références croisées
 
     - accéder à des fonctions système (par ex. imprimer un message quand
        une règle est violée)
 
     - dupliquer les données dans un autre fichier pour augmenter
        la sécurité (sur un autre système ?)


|    Changer de couleur
 
 Avantages : 
 
 
     - Développement plus rapide des applications
        Les opérations effectuées par les triggers sont stockées dans la
        Base de Données, et n'ont donc plus besoin d'être programmées
        dans chaque application.
 
     - Renforcement des règles internes
        Un trigger est défini une seule fois, mais est utilisé par chaque
        application accédant à la Base de Données.
 
     - Maintenance facilitée
        Si une règle interne est remplacée, seul le trigger concerné doit
        être modifié et non chaque programme applicatif.
 
     - Amélioration des performances en environnement client/serveur
        Toutes les règles s'exécutent sur le serveur avant l'envoi du
        résultat ou la réalisation de l'action B de D.
 
 


|    Changer de couleur
 
 En pratique : 
 
 Pour utiliser la fonction trigger, vous devez écrire un programme,
  puis l'ajouter à un fichier physique.
 
 
 
                    Ajouter déclencheur fich phys (ADDPFTRG)   
 
 Indiquez vos choix, puis appuyez sur ENTREE. 
 
 Fichier physique . . . . . . . . FILE            ########## 
   Bibliothèque . . . . . . . . .                  *LIBL      
 Moment de déclenchement  . . . . TRGTIME         ######## 
 Evénement de déclenchement . . . TRGEVENT        ######## 
 Programme  . . . . . . . . . . . PGM             ########## 
   Bibliothèque . . . . . . . . .                  *LIBL      
 Remplacer déclencheur  . . . . . RPLTRG         *NO  
 
 
 


|    Changer de couleur
 
                    Ajouter déclencheur fich phys (ADDPFTRG)   
 
 Indiquez vos choix, puis appuyez sur ENTREE. 
 
 Fichier physique . . . . . . . .    CLIENTP       Nom
   Bibliothèque . . . . . . . . .     *LIBL       Nom, *LIBL, *CURLIB
 Moment de déclenchement  . . . .    *BEFORE       *BEFORE, *AFTER
 Evénement de déclenchement . . .    *UPDATE       *INSERT, *DELETE, *UPDATE
 Programme  . . . . . . . . . . .    TRIGGER1      Nom
   Bibliothèque . . . . . . . . .     *LIBL       Nom, *LIBL, *CURLIB
 Remplacer déclencheur  . . . . .   *NO           *NO, *YES
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
 
                    Ajouter déclencheur fich phys (ADDPFTRG)   
 
 Indiquez vos choix, puis appuyez sur ENTREE. 
 
 Fichier physique . . . . . . . . >  CLIENTP       Nom
   Bibliothèque . . . . . . . . .     *LIBL       Nom, *LIBL, *CURLIB
 Moment de déclenchement  . . . . >  *BEFORE       *BEFORE, *AFTER
 Evénement de déclenchement . . . >  *UPDATE  <--+ *INSERT, *DELETE, *UPDATE
 Programme  . . . . . . . . . . . >  TRIGGER1    | Nom
   Bibliothèque . . . . . . . . .     *LIBL     | Nom, *LIBL, *CURLIB
 Remplacer déclencheur  . . . . .   *NO         | *NO, *YES
 Condition déclenchement en màj     *ALWAYS  <--+ *ALWAYS, *CHANGE
                                                |
                                                |
                           .....................|........................
                           : le mot-clé TRGUPDCND ne s'affiche que si   :
                           : TRGEVENT est saisi avec la valeur *UPDATE  :
                           :............................................:
 
 
 


|    Changer de couleur
 
 Fichier . . . . :   QPDSPFD                          Page/Ligne  1/1        
 Contrôle  . . . .                                    Colonnes    1 - 78        
 Recherche . . . .                                  
 *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+... 
    14/04/95                Description de fichier
  Paramètres de la commande DSPFD
    Fichier . . . . . . . . . . . . . . . . . . : FILE       CLIENTP
      Bibliothèque  . . . . . . . . . . . . . . :            *LIBL
    Type d'information  . . . . . . . . . . . . : TYPE       *ALL
    Attributs du fichier  . . . . . . . . . . . : FILEATR    *ALL
    Système . . . . . . . . . . . . . . . . . . : SYSTEM     *LCL
                                                                    
 ......................................................................
 :Description de déclencheur                                          :
 :      Heure de déclenchement  . . . . . . . . :            *BEFORE  :
 :      Evénement de déclenchement. . . . . . . :            *UPDATE  :
 :      Condition de déclenchement. . . . . . . :            *ALWAYS  :
 :      Nom du programme  . . . . . . . . . . . : PGM        TRIGGER1 :
 :        Bibliothèque  . . . . . . . . . . . . : LIB        AF4TEMP  :
 :....................................................................:
 


|    Changer de couleur
 
                     Enlever déclencheur fichier (RMVPFTRG)    
 
 Indiquez vos choix, puis appuyez sur ENTREE. 
 
 Fichier physique . . . . . . . . FILE            ########## 
   Bibliothèque . . . . . . . . .                  *LIBL      
 Moment de déclenchement  . . . . TRGTIME        *ALL     
 Evénement de déclenchement . . . TRGEVENT       *ALL     
 
                          ............................................
                          : Les triggers peuvent être tous enlevés   :
                          : en une seule fois, ou bien moment par    :
                          : moment, événement par événement.         :
                          :..........................................:
 
 
 
 
 
 
 


|    Changer de couleur
 
 Programme trigger et contrôle de validation : 
 
            FONCTIONNEMENT HORS CONTROLE DE VALIDATION 
 
 Si le programme applicatif et le programme trigger ne s'exécutent pas
  sous contrôle de validation, toute erreur du programme trigger laissera
  les fichiers dans l'état au moment de l'erreur.
 
 
            FONCTIONNEMENT SOUS CONTROLE DE VALIDATION 
 
 Si le programme applicatif seul s'exécute sous contrôle de validation,
  l'opération COMMIT du programme applicatif s'applique uniquement à ses
  propres modifications.
 
 
 Si le programme trigger seul s'exécute sous contrôle de validation, les
  modifications effectuées par le programme trigger sont validées quand :
 
      - le groupe d'activation se termine (COMMIT implicite)
      - une opération de COMMIT est demandée par le programme


|    Changer de couleur
 Si le programme applicatif et le programme trigger s'exécutent sous le
  même contrôle de validation, un arrêt anormal du programme trigger
  entraînera le Rollback de toutes les opérations qui lui sont associées.
 
 Un Rollback est également effectué sur l'opération de modification
  d'origine. Ceci nécessite que le programme trigger envoie un message
  d'exception quand l'erreur est détectée.
 
 Les deux programmes sont alors fortement couplés  , c'est la solution pour
  un trigger chargé de détecter des erreurs pouvant annuler l'action B de D.
 
 
 Si le programme applicatif et le programme trigger s'exécutent sous des
  contrôles de validation différents, l'opération COMMIT du programme
  applicatif n'agit que sur son propre contrôle de validation.
 
 La validation des modifications du programme trigger doit être effectuée
  de façon distincte.
 
 les deux programmes sont faiblement couplés, c'est la solution pour un
  trigger chargé de répercuté des actions (dans un autre fichier)
 


|    Changer de couleur
 Ecriture d'un programme trigger : 
 
 Une opération de modification, sur un fichier physique ayant un trigger
  associé, déclenchera l'appel du programme trigger concerné.
 
 L'opération de modification passera 2 paramètres au programme trigger.
 Dans ces paramètres, le programme récupérera une copie des enregistrements
  avant et après l'opération.
 
                      Paramètres                             Types 
 
     Buffer contenant les informations sur l'opération      Char(*)
     Longueur du buffeur                                    Binary(4)
 
 Le buffer contient 2 parties, une partie fixe et une partie variable.
 
 La partie fixe contient le nom du fichier, du membre, l'événement, le
  moment, le niveau de vérouillage de la définition de validation, et le
  CCSID de l'enregistrement concerné par l'opération (soit 95 charac.).
 
 La partie variable contient les images de l'enregistrement avant et
  après modification.


|    Changer de couleur
 
 Description du buffer : 
 
   Dépl   Type              Champ 
 
     0   Char(10)    Nom du fichier physique
    10   Char(10)    Nom de la librairie
    20   Char(10)    Nom du membre
    30   Char(1)     Evénement déclencheur   (1=INSERT,2=DELETE,3=UPDATE)
    31   Char(1)     Moment du déclenchement (1=AFTER,2=BEFORE)
    32   Char(1)     Niveau de verrouillage de la définition de validation
                                             (0=*NONE,1=*CHG,2=*CS,3=*ALL)
    36   Binary(4)   CCSID des données
    48   Binary(4)   Image avant : Déplacement de l'enregistrement
    52   Binary(4)                 Longueur de l'enregistrement
    56   Binary(4)                 Déplacement de la description des champs
    60   Binary(4)                 Longueur de la description des champs
    64   Binary(4)   Image après : Déplacement de l'enregistrement
    68   Binary(4)                 Longueur de l'enregistrement
    72   Binary(4)                 Déplacement de la description des champs
    76   Binary(4)                 Longueur de la description des champs
    96   Char(*)     Début de la zone variable


|    Changer de couleur
 
 Le pgm trigger peut signaler une erreur logique :
 
    + il doit envoyer un message à l'appelant
 
      attention avec ILE, une procédure PEP est ajoutée dans la liste
       d'invocation.
 
      PEP = Program Entry Point
 
        il faut donc envoyer 2 niveaux au-dessus
 
        ou utiliser la valeur *PGMBDY avec l'API QMHSNDPM (envoi de msg)
 
 
    + l'action base de données est interrompue inachevée.
 
 
    + le message CPF502B est émis, le message envoyé par votre trigger
        n'est pas retransmis (donc le texte est inutilisable)
 
 


|    Changer de couleur
 
 Divers :   
 
 Les triggers peuvent être écrits dans n'importe lequel des langages
  utilisés sur l'AS/400.
 
 Le programme trigger doit être de type *PGM. Il ne peut pas être de type
  *SRVPGM (programme de service ILE).
 
 Le programme ne peut pas contenir d'opérations COMMIT, ROLLBACK ou
  ENDCMTCTL pour la définition de validation associée au programme
  applicatif.
 
 Les programmes trigger et applicatif peuvent s'exécuter dans des groupes
  d'activation différents ou non. Il est recommandé de compiler le trigger
  avec ACTGRP(*CALLER) pour augmenter le lien entre les deux programmes.
 
 Un programme trigger peut appeler d'autres programmes, ou même être
  imbriqué en cascade (une opération dans un trigger provoque l'appel
  d'un autre trigger).
 Il peut donc s'appeler de façon récursive.
 Le nombre maximum de niveaux d'imbrications est 200.


|    Changer de couleur
 Attention aux cas suivants, provoquant une erreur :
 
      - mise à jour du même enregistrement déjà modifié par l'opération de
        modification, ou par une opération dans le programme trigger.
 
      - génération d'un conflit sur le même enregistrement à l'intérieur
        d'une opération de modification. Par exemple, un enregistrement
        inséré par l'opération de modification puis supprimé par le
        programme trigger.
 
 Lors de l'ajout d'un programme trigger à un fichier physique, ce dernier
  et tous les logiques associés sont verrouillés de façon exclusive. 
 
 Le programme s'applique à tous les membres du fichier physique.
 
 Toute modification effectuée par le biais d'un fichier logique, ou d'une
  vue SQL, entraîne l'appel du programme trigger.
 
 Une commande CPYF CRTFILE(*YES) ne reporte pas les attributs triggers sur
  le fichier créé.
 
 Une commande CRTDUPOBJ reporte tous les attributs triggers. 





©AF400