【发布时间】:2017-06-21 20:54:15
【问题描述】:
我需要创建一个 SQL 触发器,其中插入语句从不同的表中选择多个列。像这样的:
CREATE OR REPLACE TRIGGER ACTIV_TRG
AFTER INSERT ON TRANS_LOG
REFERENCING NEW AS TR
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
INSERT INTO ACTIVITIES values (
(SELECT MAX(SEQNBR) FROM ACTIV_LOG where TRAN_ID = 'XXX'),
TR.ACCOUNT,
TR.EVENT,
SELECT TRAN_ID ,
TRAN_DT ,
TRAN_LN FROM ACTIV_DEL where TRAN_ID = 'XXX',
CURRENT TIMESTAMP
)
END;
问题是当我尝试在子查询中选择多个列时。 我知道我是否像这样分隔子查询:
(TRAN_ID FROM ACTIV_DEL where TRAN_ID = 'XXX'),
(TRAN_DT FROM ACTIV_DEL where TRAN_ID = 'XXX'),
(TRAN_LN FROM ACTIV_DEL where TRAN_ID = 'XXX'),
会起作用,但肯定有更好、更有效的方法来做到这一点。
提前致谢。
肯定有比这更好的解决方案:
CREATE OR REPLACE TRIGGER ACTIV_TRG
AFTER INSERT ON TRANS_LOG
REFERENCING NEW AS TR
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
INSERT INTO ACTIVITIES values (
(SELECT MAX(SEQNBR) FROM ACTIV_LOG where TRAN_ID = 'XXX'),
TR.ACCOUNT, ---> FIELD FROM TRANS_LOG (TRIGGER SOURCE)
TR.EVENT, ---> FIELD FROM TRANS_LOG (TRIGGER SOURCE)
SELECT TRAN_ID FROM ACTIV_DEL where TRAN_ID = 'XXX', ---> REPETING SELECT
SELETC TRAN_DT FROM ACTIV_DEL where TRAN_ID = 'XXX', ---> REPETING SELECT
SELECT TRAN_LN FROM ACTIV_DEL where TRAN_ID = 'XXX', ---> REPETING SELECT
CURRENT TIMESTAMP
)
END;
【问题讨论】: