我正在尝试为Derby数据库编写更新触发器。每次进行更改/将新记录添加到ODS_CNTRL表时,触发器都需要更新ODS_CNTRL_AUDIT表。 (这是在Oracle中)
到目前为止我已经
了 create trigger Update_Audit
after update
on ODS_CNTRL
for each row MODE DB2SQL
insert into ODS_CNTRL_AUDIT
(
ODS_LOAD_ID, ODS_STATUS, USR_WWID, USR_FIRST_NM,
USR_LAST_NM, USR_DISPLAY_NM, USR_NT_ID,TOT_AMT
)
values
(
ODS_CNTRL.ODS_LOAD_ID, ODS_CNTRL.ODS_STATUS, ODS_CNTRL.USR_WWID, ODS_CNTRL.USR_FIRST_NM,
ODS_CNTRL.USR_LAST_NM, ODS_CNTRL.USR_DISPLAY_NM, ODS_CNTRL.USR_NT_ID, ODS_CNTRL.TOT_AMT,
T
);
但是这段代码不会运行。我收到错误 -
"Error code -1, SQL state 42X04: Column 'ODS_CNTRL.ODS_LOAD_ID' is either not in any table in the FROM list or appears within a join specification and is outside the scope of the join specification or appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE statement then 'ODS_CNTRL.ODS_LOAD_ID' is not a column in the target table."
我是否需要添加For命令?需要对此触发器进行哪些编辑才能正常工作?所有值都是ODS_CONTROL表中的列。
答案 0 :(得分:0)
尝试使用REFERENCING子句,如下所述:http://db.apache.org/derby/docs/10.9/ref/rrefsqlj43125.html
答案 1 :(得分:0)
我已经弄明白了这个问题。我需要在值部分中为每个语句选择一个select / from语句。我的结束代码看起来像这样 -
create trigger UpdateAUDIT
after update
on ODS_CNTRL
for each row MODE DB2SQL
insert into ODS_CNTRL_AUDIT
(
ODS_LOAD_ID, ODS_STATUS, USR_WWID, USR_FIRST_NM,
USR_LAST_NM, USR_DISPLAY_NM, USR_NT_ID,TOT_AMT
)
values
(
(select ODS_LOAD_ID from ODS_CNTRL),(select ODS_STATUS from ODS_CNTRL),
(select USR_WWID from ODS_CNTRL), (select USR_FIRST_NM from ODS_CNTRL),
(select USR_LAST_NM from ODS_CNTRL),(select USR_DISPLAY_NM from ODS_CNTRL),
(select USR_NT_ID from ODS_CNTRL),(select TOT_AMT from ODS_CNTRL)
);