首页 > 应用开发 > IT综合 > 有关trigger的案例
一开发人员想实现利用表trigger往该表有条件地插入记录,即不满足条件的记录插入时通过trigger来拦截掉。找到了我帮忙是否可以实现,经深入分析后发觉根本无法实现这个功能。如下的试验可证明一切:
[@more@]SQL> create table test_trigger
2 (
3 name number(8)
4 );
Table created
SQL> set serveroutput on
SQL> CREATE OR REPLACE PROCEDURE proc_delete_test_trigger (p_name in varchar2)
2 IS
3 v_number number;
4 pragma autonomous_transaction;
5 BEGIN
6
7 begin
8 select count(*) into v_number from test_trigger
9 where name=p_name;
10 exception
11 when others then
12 v_number:=-1;
13 end;
14
15 dbms_output.put_line('the v_number is: '||v_number);
16
17 delete from test_trigger
18 where name=p_name;
19 COMMIT;
20 END;
21 /
Procedure created
SQL> CREATE OR REPLACE TRIGGER Trg_test_trigger
2 AFTER INSERT ON test_trigger
3 FOR EACH ROW
4
5 BEGIN
6 proc_delete_test_trigger(:NEW.name);
7 END Trg_test_trigger;
8 /
Trigger created
SQL> truncate table test_trigger;
Table truncated
SQL> insert into test_trigger values(22);
the v_number is: 0
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test_trigger;
NAME
---------
22
SQL>
可看出,有关triiger的一大原则是表trigger的“点火”动作不能反过来操作自身;另外表trigger的触发内容跟触发动作是一个事务中的。pragma autonomous_transaction用来自动产生一个新的事务处理。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/38542/viewspace-920284/ ,如需转载,请注明出处,否则将追究法律责任。