1

我正在尝试为 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 表中的列。

4

2 回答 2

0

尝试使用 REFERENCING 子句,如下所述:http: //db.apache.org/derby/docs/10.9/ref/rrefsqlj43125.html

于 2013-02-25T19:33:40.700 回答
0

我已经弄清楚了这个问题。我需要为 value 部分中的每个设置一个 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)
            );
于 2013-03-01T21:12:04.970 回答