表结构如下
create table TBL_REST_WAITING_QUEUE
(
  USER_CODE         VARCHAR2(12),
  USER_NAME         VARCHAR2(12),
  AGENT_CODE        VARCHAR2(12),
  BRAND             VARCHAR2(30),
  REQ_MESSAGEID     VARCHAR2(20),
  BEGIN_WAITING     DATE default SYSDATE,
  QUEUE_LIST        VARCHAR2(50),
  REQ_TYPE          INTEGER,
  REQ_REST_TYPE     VARCHAR2(20),
  REQ_REST_TXT      VARCHAR2(100),
  ISENABLEREST      INTEGER default 0,
  ISENABLERESTTIME  DATE,
  ISENABLEAGENTCODE VARCHAR2(20),
  ISENABLETXT       VARCHAR2(100),
  ID                INTEGER
)
要实现的效果就是当表的数据发生更改时, 如果  ISENABLEREST=1 , 就把 ISENABLERESTTIME 设置成SysDate

解决方案 »

  1.   

    create or replace trigger tri_test
      before INSERT OR DELETE OR UPDATE on TBL_REST_WAITING_QUEUE
      for each row
      pragma autonomous_transactiondeclare;
    BEGIN
      IF :NEW.ISENABLEREST=1 THEN
         UPDATE ISENABLERESTTIME=SYSDATE WHERE id=:new.id;
      END IF;
    end tri_test;
      

  2.   

    ?能实现么?
    更新A表,解发A表的trigger,trigger中又对表进行修改?会报错的。1楼的trigger中,带着自治事务的标识pragma autonomous_transactiondeclare;编译有错误。
      

  3.   

    我认为把
    UPDATE ISENABLERESTTIME=SYSDATE WHERE id=:new.id;
    改成
    new.isenableresttime := sysdate;
    要好一些。
      

  4.   

    严重同意5楼,同时去掉delete选项,只在insert或update触发create or replace trigger tri_REST_WAITING_QUEUE
      before INSERT OR UPDATE on TBL_REST_WAITING_QUEUE
      for each row
    BEGIN
      IF :NEW.ISENABLEREST=1 THEN
         :new.ISENABLERESTTIME:=SYSDATE;
      END IF;
    end; 
      

  5.   

    一个小讲法错误而矣,详见代码:CREATE OR REPLACE TRIGGER MyTestTrigger
      AFTER INSERT OR UPDATE ON tbl_rest_waiting_queue  
      FOR EACH ROW
    DECLARE  
      PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
      IF :NEW.ISENABLEREST = 1 THEN
         UPDATE tbl_rest_waiting_queue SET ISENABLERESTTIME = SYSDATE WHERE id=:new.id;
      END IF;
    END MyTestTrigger;
      

  6.   

    测试后的正确代码,请参考:CREATE OR REPLACE TRIGGER MyTestTrigger
      BEFORE INSERT OR UPDATE ON tbl_rest_waiting_queue  
      FOR EACH ROW
    DECLARE  
      
    BEGIN
      IF :NEW.ISENABLEREST = 1 THEN
         :New.Isenableresttime := SYSDATE;
      END IF;
    END MyTestTrigger;