Je travaille sur un système utilisant Oracle DB. Un outil ETL (ODI) met le déclencheur suivant sur une table pour activer la capture de données modifiée (CDC).Le déclencheur oracle ne reconnaît pas l'insertion
create or replace trigger SCHEMA.T$TABLE_NAME
after insert or update or delete on SCHEMA.TABLE_NAME
for each row
declare
V_FLAG VARCHAR(1);
V_ROW_ID VARCHAR2(60);
begin
if updating then
V_ROW_ID := :new.ROW_ID;
V_FLAG := 'U';
end if;
if inserting then
V_ROW_ID := :new.ROW_ID;
V_FLAG := 'I';
end if;
if deleting then
V_ROW_ID := :old.ROW_ID;
V_FLAG := 'D';
end if;
insert into SCHEMA.J$TABLE_NAME
(
JRN_SUBSCRIBER,
JRN_CONSUMED,
JRN_FLAG,
JRN_DATE,
ROW_ID
)
select JRN_SUBSCRIBER,
'0',
V_FLAG,
sysdate,
V_ROW_ID
from SCHEMA.SNP_SUBSCRIBERS
where JRN_TNAME = 'SCHEMA.TABLE_NAME'
/* The following line can be uncommented for symetric replication */
/* and upper(USER) <> upper('SCHEMA') */
;
end;
Mon problème est que cette chose ne reconnaît pas les mises à jour. Par exemple, quand je fais une mise à jour très simple sur une ligne, il insère toujours un 'je' dans la table CDC, signifiant qu'il a lu la mise à jour comme une insertion. Quoi de neuf? C'est quelque chose d'étrange? Je n'ai pas lu à ce sujet nulle part.
Merci d'avance!
Cela m'a donné quelques erreurs à propos de ne pas utiliser les: nouvelles références. Je devine que vous dites que je devrais réécrire ce déclencheur comme déclencheur de niveau d'instruction au lieu d'un déclencheur de niveau de ligne? http://psoug.org/reference/table_trigger.html – Nate
oui vous avez raison, le: nouveau besoin d'un déclencheur ROW LEVEL ... (voir mon edit) – guigui42
Ok, voici mon problème: j'ai besoin de la ligne Id de la rangée. Je ne pense pas que je puisse l'obtenir dans un déclencheur au niveau des déclarations, n'est-ce pas? – Nate