2013-02-25 1 views
1

Я пытаюсь написать триггер обновления для базы данных Derby. Триггер должен обновлять таблицу ODS_CNTRL_AUDIT каждый раз при внесении изменений/новая запись добавляется в таблицу ODS_CNTRL. (Это в Oracle)Derby SQL Update Trigger

До сих пор я

  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

я понял, вопрос. Мне нужно было иметь инструкцию 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) 
      ); 
0

Попробуйте использовать пункт REFERENCING, как описано здесь: http://db.apache.org/derby/docs/10.9/ref/rrefsqlj43125.html

+0

Из того, что я понимаю, ссылка является ориентировочным аспектом триггера. Как и я не вижу, как это применимо, потому что мне нужно скопировать значения из таблицы OCD_CNTRL, не использовать старые или новые. –

 Смежные вопросы

  • Нет связанных вопросов^_^