oracle触发器中增删改查本表
(1)只有before insert触发器中才可以查询或更新本表
1
2
3
4
5
6
7
8
9
10
11
|
create
or
replace
trigger
tri_test_ins
before
insert
on
test
for
each row
declare
v_cnt
integer
;
begin
select
count
(*)
into
v_cnt
from
test;
dbms_output.put_line(
'test count:'
||to_char(v_cnt));
update
test
set
a9=
'99'
;
end
;
|
执行insert后,只有当前插入的记录值不是99,其它的记录都被更新成了99。
(2)before/after update、before/after delete、after insert5种情况都不可以查询或更新本表。
(3)使用自治事务可以实现任意触发器查本表。但不能实现在自治事务中更新本表。
查询本表的情况是最常见的。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
create
or
replace
trigger
tri_test_ins
after
update
on
test
for
each row
declare
v_cnt
integer
;
PRAGMA AUTONOMOUS_TRANSACTION;
begin
begin
select
count
(*)
into
v_cnt
from
test;
dbms_output.put_line(
'test count:'
||to_char(v_cnt));
end
;
end
;
|
(4)使用自治事务可以实现新增或删除本表的记录。这种情况一般不会用到。
PRAGMA AUTONOMOUS_TRANSACTION;