create or replace trigger TRI_SEQ_LOG
after  update of SEQ_NUM on HR.KEY_SEQ for each row   
declare   
      SYS_DATE   DATE;
      LOGGIN_USER  VARCHAR2(100);
      MACHINE_NAME VARCHAR2(100);
      IP           VARCHAR2(100);
      NEW_VAL      NUMBER;
      OLD_VAL      NUMBER;
      ACTION       VARCHAR2(100);
      TABLE_NAME   VARCHAR2(100);
begin
select  sysdate , SYS_CONTEXT('USERENV','SESSION_USER') , SYS_CONTEXT('USERENV','TERMINAL') , SYS_CONTEXT('USERENV','IP_ADDRESS') into SYS_DATE,LOGGIN_USER,MACHINE_NAME,IP from DUAL;
if  OLD.T_NAME='T_A' then
    insert into HR.KEY_SEQ_LOG values(:SYS_DATE,:LOGGIN_USER,:MACHINE_NAME,:IP,:NEW.KEY_SEQ_NUM,:OLD.KEY_SEQ_NUM, 'update',:OLD.T_NAME);
end if;
end;
上面是语法,第一次用oracle的触发器,不知道哪里有问题,谢谢大家

解决方案 »

  1.   

    insert into HR.KEY_SEQ_LOG values(:SYS_DATE,:LOGGIN_USER,:MACHINE_NAME,:IP,:NEW.KEY_SEQ_NUM,:OLD.KEY_SEQ_NUM, 'update',:OLD.T_NAME); 
    改成
    insert into HR.KEY_SEQ_LOG values(SYS_DATE,LOGGIN_USER,MACHINE_NAME,IP,:NEW.KEY_SEQ_NUM,:OLD.KEY_SEQ_NUM, 'update',:OLD.T_NAME); 
    试试
      

  2.   

    我在表HR.KEY_SEQ 中修改数据时提示trigger无效且未通过重新确认。创建触发器时没有提示,创建好了。
      

  3.   

    试试这个
    create or replace trigger TRI_SEQ_LOG 
    after  update of SEQ_NUM on HR.KEY_SEQ for each row  
    declare  
          SYS_DATE  DATE; 
          LOGGIN_USER  VARCHAR2(100); 
          MACHINE_NAME VARCHAR2(100); 
          IP          VARCHAR2(100); 
          NEW_VAL      NUMBER; 
          OLD_VAL      NUMBER; 
          ACTION      VARCHAR2(100); 
          TABLE_NAME  VARCHAR2(100); 
    begin 
    select  sysdate , SYS_CONTEXT('USERENV','SESSION_USER') , SYS_CONTEXT('USERENV','TERMINAL') , SYS_CONTEXT('USERENV','IP_ADDRESS') into SYS_DATE,LOGGIN_USER,MACHINE_NAME,IP from DUAL; 
    if  :OLD.T_NAME='T_A' then 
        insert into HR.KEY_SEQ_LOG values(SYS_DATE,LOGGIN_USER,MACHINE_NAME,IP,:NEW.KEY_SEQ_NUM,:OLD.KEY_SEQ_NUM, 'update',:OLD.T_NAME);
    end if; 
    end;