Déclencheur de mise à jour DB2
Question
J'essaie de créer un déclencheur dans un DB2
La base de données qui s'exécute sur la mise à jour d'une colonne dans une seule table, puis remplit une autre table avec certaines valeurs.
Par exemple, il y a une table d'unité électrique avec un FLEET_ID
colonne. Chaque fois le FLEET_ID
est changé, je dois créer une nouvelle ligne dans le TRANS_AUDIT
table.
La TRANS_AUDIT
Le schéma est le suivant:
CREATE TABLE LYNX.TRANS_AUDIT (
TA_ID INTEGER NOT NULL,
TA_KEY_VALUE VARCHAR(100),
TA_TABLE_CHANGED VARCHAR(40),
TA_FIELD_CHANGED VARCHAR(40),
TA_OLD_FIELD_VALUE VARCHAR(100),
TA_NEW_FIELD_VALUE VARCHAR(100),
TA_USER_WHO_CHANGED VARCHAR(128),
TA_DATE_CHANGED TIMESTAMP,
TA_COMMENT VARCHAR(40),
TA_OLD_FIELD_DOUBLE DOUBLE DEFAULT 0,
TA_NEW_FIELD_DOUBLE DOUBLE DEFAULT 0,
PRIMARY KEY (TA_ID)
);
Voici ce que j'ai jusqu'à présent, mais je n'arrive pas à le faire fonctionner, je reçois un "séquence de fonction" Erreur.
CREATE TRIGGER PU_UPD_FLEETID
AFTER UPDATE OF FLEET_ID ON PUNIT
REFERENCING OLD AS O NEW AS N
FOR EACH ROW
MODE DB2SQL
BEGIN ATOMIC
DECLARE
vTA_ID INTEGER;
IF(N.FLEET_ID <> O.FLEET_ID) THEN
SELECT MAX(TA_ID)+1 INTO vTA_ID; --generate a unique sequential id
INSERT INTO LYNX.TRANS_AUDIT
(TA_ID, TA_KEY_VALUE, TA_TABLE_CHANGED, TA_FIELD_CHANGED, TA_OLD_FIELD_VALUE,
TA_NEW_FIELD_VALUE, TA_USER_WHO_CHANGED, TA_DATE_CHANGED, TA_COMMENT,
TA_OLD_FIELD_DOUBLE, TA_NEW_FIELD_DOUBLE)
VALUES
(TA_ID, N.UNIT_ID , 'PUNIT', 'FLEET_ID', O.FLEET_ID, N.FLEET_ID , SESSION_USER
,CURRENT TIMESTAMP , '', '0' ,'0' );
END IF;
END;
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange