0
我试图创建在一个表上栏的更新运行,然后在一定的价值观另一台填补了DB2数据库的触发器。DB2更新触发
例如,存在与FLEET_ID
柱的动力单元表。每当FLEET_ID
已更改,我需要在TRANS_AUDIT
表中创建一个新行。
的TRANS_AUDIT
架构如下:
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)
);
这里是我到目前为止,但我似乎无法得到它的工作,我得到一个function sequence
错误。
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 FROM TRANS_AUDIT 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;
我不是一个DB2的专家,但'SELECT MAX(TA_ID)+1 INTO vTA_ID;'看起来很可疑。这个陈述选择什么? – 2013-03-21 15:16:28
我正在尝试生成一个比TRANS_AUDIT表中的当前ID大一个的唯一ID。什么是正确的方法来做到这一点? – azoorob 2013-03-21 15:25:43
啊,我的错误,我不小心抄错了,我忘了从声明 – azoorob 2013-03-21 15:26:54