Trigger

IBM i, configuration, commandes, ...
Répondre
SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

Trigger

Message 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.

vazymimil
Messages : 32
Enregistré le : ven. 28 sept. 2018, 17:14:46

Re: Trigger

Message 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 ?
Nicolas

SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

Re: Trigger

Message 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.
Fichiers joints
2021-06-28_10h21_17.png
2021-06-28_10h21_17.png (28.34 Kio) Vu 9479 fois

vazymimil
Messages : 32
Enregistré le : ven. 28 sept. 2018, 17:14:46

Re: Trigger

Message 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é|
Nicolas

SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

Re: Trigger

Message par SebastienB »

Merci d'avoir pris du temps.

Répondre