Page 1 sur 1

Posté : mar. 20 nov. 2018, 10:04:39
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.

(sujet inconnu)

Posté : mar. 20 nov. 2018, 10:17:44
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

Posté : mar. 20 nov. 2018, 11:21:44
par thomas.barberot
Et bien c'est un programme RPG, parce qu'il fait des choses trop complexes à faire en SQL pur.

ADDPFTRG

Posté : mar. 20 nov. 2018, 17:54:34
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 ?

(sujet inconnu)

Posté : mar. 04 déc. 2018, 16:15:02
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.