在ORCCLE建立了TABLE1 UPDATE COLUMN1的触发器,在系统的页面上运行可以触发这个触发器,可是为什么在sql developer里面直接执行UPDATE FROM TABLE1 SET COLUMN1='1' 却不能触发? 要怎样才能不通过页面操作就可以触发呢?测试时在页面一次一次操作很麻烦触发器语句如下:
create or replace
TRIGGER "TRIGGER1" BEFORE UPDATE OF COLUMN1 ON TABLE1
FOR EACH ROW
DECLARE
BEGIN
    INSERT INTO TABLE1_LOGS VALUES(:OLD.COLUMN1,:NEW.COLUMN1);
END;

解决方案 »

  1.   

    在pl/sql developer里面执行完update语句后,有木有commit的?
      

  2.   

    未commit,在同一会话是可以查询到的
    在同一pl/sql developer SQL窗口中执行:
    udpate table TABLE1....
    select * from TABLE1_LOGS...如果要在其它会话中查看,必须commit !
      

  3.   


    SQL> select * from t;
     
            ID COL_1
    ---------- -----
             1 aaa
             2 bbb
             3 ccc
             4 ddd
    SQL> create or replace trigger tri_ta
      2  before update of col_1 on t
      3  for each row
      4  begin
      5       insert into ta values(:old.col_1,:new.col_1);
      6  end tri_ta;
      7  /
    Trigger created
    SQL> select * from ta;
     
    COL_1      COL_2
    ---------- ----------
     
    SQL> 
    SQL> update t set col_1='000'
      2  where id=1
      3  /
     
    1 row updated
     
    SQL> select * from ta;
     
    COL_1      COL_2
    ---------- ----------
    aaa        000
     
    SQL> 
      

  4.   

    同一会话未commit可见数据,另一会话必须commit之后才可见数据
      

  5.   

    那应该会触发的。
    或是在dba_triggers看看触发器的状态。
      

  6.   


    CREATE TABLE t1(fid INT,fno VARCHAR2(20));INSERT INTO t1 
    SELECT 1,'aa' FROM dual
    UNION ALL
    SELECT 2,'bb' FROM dual
    UNION ALL
    SELECT 3,'cc' FROM dual
    UNION ALL
    SELECT 4,'dd' FROM dual;SELECT * FROM t1;CREATE TABLE t2(fid INT,fid2 INT);CREATE OR REPLACE TRIGGER tri_t1
    BEFORE UPDATE OF fid ON t1 FOR EACH ROW
    BEGIN
      INSERT INTO t2 VALUES(:old.fid,:new.fid);
    END;UPDATE t1 SET fid=5;SELECT * FROM t2;FID     FID2
    1 5
    2 5
    3 5
    4 5
    不commit也是可以触发的