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
scroll top