当前位置: 代码迷 >> Oracle管理 >> ORCLE 触发器没触发,该怎么解决
  详细解决方案

ORCLE 触发器没触发,该怎么解决

热度:290   发布时间:2016-04-24 05:38:41.0
ORCLE 触发器没触发
在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;

------解决方案--------------------
在pl/sql developer里面执行完update语句后,有木有commit的?
------解决方案--------------------
未commit,在同一会话是可以查询到的
在同一pl/sql developer SQL窗口中执行:
udpate table TABLE1....
select * from TABLE1_LOGS...

如果要在其它会话中查看,必须commit !
------解决方案--------------------
SQL code
SQL> select * from t;         ID COL_1---------- -----         1 aaa         2 bbb         3 ccc         4 dddSQL> 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 createdSQL> 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>
------解决方案--------------------
那应该会触发的。
或是在dba_triggers看看触发器的状态。
------解决方案--------------------
SQL code
CREATE TABLE t1(fid INT,fno VARCHAR2(20));INSERT INTO t1 SELECT 1,'aa' FROM dualUNION ALLSELECT 2,'bb' FROM dualUNION ALLSELECT 3,'cc' FROM dualUNION ALLSELECT 4,'dd' FROM dual;SELECT * FROM t1;CREATE TABLE t2(fid INT,fid2 INT);CREATE OR REPLACE TRIGGER tri_t1BEFORE UPDATE OF fid ON t1 FOR EACH ROWBEGIN  INSERT INTO t2 VALUES(:old.fid,:new.fid);END;UPDATE t1 SET fid=5;SELECT * FROM t2;FID     FID21    52    53    54    5
------解决方案--------------------
同意六楼的看法,按照你说的,这个触发器应该执行没有问题的。

首先确认你的触发器是有效状态。
------解决方案--------------------
设置触发器后有没有加上 / 啊?或许是没有设置成功