triggers

IBM i, configuration, commandes, ...
Répondre
thomas.barberot
Messages : 52
Enregistré le : jeu. 12 avr. 2012, 14:50:53

Message par thomas.barberot »

Bonjour.

Sur un table, un trigger est ajouté (ADDPFTRG) en le faisant pointer sur un objet RPGLE/*PGM.

Lorsque la table est ouverte (en natif) dans un programme de mise à jour, le programme associé au trigger apparaît alors comme verrouillé (même si aucune action sur la table n'a encore été effectuée), et il n'est alors plus possible de remplacer cet objet (par exemple pour installer une correction).

Lorsqu'on remplace un programme "normal" (non trigger), l'objet remplacé est déplacé/renommé dans QRPLOBJ, et il est utilisé jusqu'à la fermeture du travail. Dans le cas des programmes associés à des triggers, ce fonctionnement semble impossible.

Est-ce que c'est bien le fonctionnement particulier pour les programmes associés à un trigger ? Y-a-t'il un moyen (compilation du programme, option du trigger) d'influencer ce comportement ?

Merci.
Modifié en dernier par thomas.barberot le mar. 20 nov. 2018, 11:19:28, modifié 2 fois.

florian67
Messages : 129
Enregistré le : lun. 23 déc. 2013, 17:03:12

(sujet inconnu)

Message par florian67 »

Salut,

Au niveau du ADDPFTRG je ne sais pas exactement comment les verrouillages fonctionnent.

Par contre ce que tu peux faire c'est créé un trigger SQL.
En cas de modification, tu fais un drop trigger et create trigger.

Exemple :
c/exec sql
c+ CREATE TRIGGER bib/nom_trigger
c+ AFTER UPDATE ON bibi/nom_fichier
c+ REFERENCING NEW ROW AS N
c+ OLD ROW AS A
c+ FOR EACH ROW MODE DB2ROW
c+ WHEN (( A.ZONE <> N.ZONE)
c+ BEGIN
c+ INSERT INTO fichiertrigger
c+ VALUES
c+ ( N.ZONE,
c+ 'UPDATE', USER, CURRENT_TIMESTAMP) ;
c+ END
c/end-exec

Florian

thomas.barberot
Messages : 52
Enregistré le : jeu. 12 avr. 2012, 14:50:53

Message par thomas.barberot »

Et bien c'est un programme RPG, parce qu'il fait des choses trop complexes à faire en SQL pur.

cmasse
Site Admin
Messages : 764
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

ADDPFTRG

Message par cmasse »

C'est effectivement un problème avec les triggers, IBM a essayé de baisser le niveau de verrouillage par une option de QAQQINI PREVENT_ADDITIONAL_CONFLICTING_LOCKS

https://ibm.co/2FAecO9

A tester ?
Christian Massé (Volubis.fr)

thomas.barberot
Messages : 52
Enregistré le : jeu. 12 avr. 2012, 14:50:53

(sujet inconnu)

Message par thomas.barberot »

La modification de la valeur (j'ai essayé "*YES" et "*NO") de l'option "PREVENT_ADDITIONAL_CONFLICTING_LOCKS" du QAQQINI de QUSRSYS n'a visiblement aucun effet sur le fait que le *PGM déclaré comme trigger soit tenu, et donc non allouable pour remplacement par la compilation, dès que le fichier est ouvert.
Je le comprendrais si le fichier était tenu en mise-à-jour, mais là, c'est en lecture simple, donc on sait que le trigger ne sera pas déclenché...

Je vais peut-être essayer d'ouvrir un dossier au point service.

Merci pour les différentes réponses.

Répondre