在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;
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 SQL窗口中执行:
udpate table TABLE1....
select * from TABLE1_LOGS...如果要在其它会话中查看,必须commit !
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>
或是在dba_triggers看看触发器的状态。
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也是可以触发的