Page 1 sur 1

Trigger

Posté : jeu. 24 juin 2021, 06:52:52
par SebastienB
Bonjour,

J'ai mis en place un trigger sur une table DB2 (AFTER INSERT OR DELETE OR UPDATE).
Il existe encore des PGM qui utilise cette table avec une description interne :

Code : Tout sélectionner

FNOMFICHIER  UF   F  300    05AIDISK    KEYLOC(3)
Mon trigger ne semble pas se déclencher dans ce cas précis.

Avez-vous un retour d'expérience à ce sujet ?

Merci.

Re: Trigger

Posté : lun. 28 juin 2021, 08:34:04
par vazymimil
Bonjour,

J'ai fait un test, mon déclencheur est appelé. Je ne vois pas pourquoi la DB ferait l'appellerait selon ce critère. C'est systématique ? Quel est son état dans DSPFD du fichier ?

Re: Trigger

Posté : lun. 28 juin 2021, 09:30:48
par SebastienB
Bonjour,

Lorsque le fichier est mis à jour par les autres PGM, le trigger est bien déclenché.
En P.J. la capture d'écran du DSPFD.

Merci.

Re: Trigger

Posté : lun. 28 juin 2021, 11:14:42
par vazymimil
Voilà mon test

Code : Tout sélectionner

                                            UNIQUE
                R TTRGR
                  C1             2A
                  K              5A
                  C2           293A
                K K          

Code : Tout sélectionner

**free
dcl-f ttrg disk(300) usage(*input:*output:*update:*delete) keyed(*char:5) keyloc(3);

dcl-ds rec len(300) qualified;
  c1 char(2);
  k char(5);
  c2 char(293);
end-ds;

rec.k =  'K1';
rec.c1 = 'C1';
rec.c2 = 'C2';

rec.k =  'K1';
write ttrg rec;

chain 'K1   ' ttrg rec;
rec.c2 = 'modifié';
update ttrg rec;

chain 'K1   ' ttrg rec;
delete ttrg;

*inlr = *on;           

Code : Tout sélectionner

create table mabib.ttrg_log (
	t char(1) not null,
	like mabib.ttrg
)

create or replace trigger mabib.ttrg_trg after INSERT OR DELETE OR update on mabib.ttrg
referencing old row as old new row as new for each row mode db2row
set option dbgview = *source 
begin
	declare t char(1);
	set t = case when inserting then 'I' when updating then 'U' when deleting then 'D' end;
	insert into mabib.ttrg_log (t, c1, k, c2) values (t, coalesce(new.c1, old.c1), coalesce(new.k, old.k), coalesce(new.c2, old.c2));
end;
	
call qcmdexc('call mabib/ttrg');

select * from mabib.ttrg

select * from mabib.ttrg_log
Après le call ttrg est vide et ttrg_log contient :

Code : Tout sélectionner

|T  |C1 |K    |C2     |
|---|---|-----|-------|
|I  |C1 |K1   |C2     |
|U  |C1 |K1   |modifié|
|D  |C1 |K1   |modifié|

Re: Trigger

Posté : mer. 30 juin 2021, 08:28:19
par SebastienB
Merci d'avoir pris du temps.