ITPub博客

首页 > 应用开发 > IT综合 > 有关trigger的案例

有关trigger的案例

原创 IT综合 作者:shiyihai 时间:2007-06-21 16:35:50 0 删除 编辑

一开发人员想实现利用表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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    235
  • 访问量
    1707884