为什么我的扳机会抛出ORA-01747?

时间:2017-04-06 03:55:21

标签: oracle triggers

我将startdate值发送到结束日期,通过值创建,以及在代码中指定的modifiedby等。只应在更新信息期间执行此操作。但是我得到了

  

ORA-01747:“toad中的user.table.column,table.column或列规范错误无效”

CREATE OR REPLACE TRIGGER SMTS.SMTS_DR_TIMINGS_UPDATE_RECORD
BEFORE UPDATE OF START_DATE
ON SMTS.SMTS_DR_TIMINGS
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpvar NUMBER;

BEGIN

  BEGIN
      update SMTS_DR_TIMINGS 
      set END_DATE = :new.START_DATE, 
          MODIFIED_BY = :new.CREATED_BY, 
          MODIFIED_DATETIME = :new.CREATED_DATETIME
      where TOWNSHIP_CODE = :new.TOWNSHIP_CODE 
      and  DR_ID = :new.DR_ID 
      and END_DATE is null ;

      Exception
      when others then null;

  END;       

END SMTS_DR_TIMINGS_UPDATE_RECORD;

任何人都可以帮我解决这个错误吗? Thanx提前

1 个答案:

答案 0 :(得分:0)

您可以尝试

 CREATE OR REPLACE TRIGGER smts.smts_dr_timings_update_record
   BEFORE UPDATE OF start_date
   ON smts.smts_dr_timings
   REFERENCING NEW AS new OLD AS old
   FOR EACH ROW
DECLARE
   tmpvar   NUMBER;
BEGIN
   BEGIN
      IF UPDATING ('start_date') AND <your logic> THEN 
      :new.end_date := :new.start_date;
      :new.modified_by := :new.created_by;
      :new.modified_datetime := SYSDATE;
      END IF;
   EXCEPTION
      WHEN OTHERS
      THEN
         NULL;
   END;
END smts_dr_timings_update_record;

更新1

CREATE OR REPLACE TRIGGER test_trg
   BEFORE UPDATE OF my_col
   ON my_table
   REFERENCING NEW AS new OLD AS old
   FOR EACH ROW
DECLARE
   tmpvar   NUMBER;
BEGIN
   BEGIN
      IF UPDATING ('my_col')
      THEN
         :new.creation_date := SYSDATE;
         :new.last_update_date := SYSDATE;
         :new.last_updated_by := 1234;
      END IF;
   EXCEPTION
      WHEN OTHERS
      THEN
         NULL;
   END;
END test_trg;

更新声明

update my_table set my_col='Test update' where my_primary_key= 45;

以上工作正常。