我正在编写一个简单的触发器,它应该只发送一条消息,其中包含更新的行数以及性别的旧值和性别的更新值。然而,当我运行更新时,我收到错误,表明表正在发生变化,并且表可能无法看到它,但我不确定为什么。
trigger
create or replace trigger updatePERSONS
after update
on PERSONS
for each row
declare
n int;
oldGender varchar(20):= :OLD.Gender;
newGender varchar(20):= :NEW.Gender;
begin
select Count(*)
into n
from PERSONS;
if (oldGender != newGender) then
dbms_output.put_line('There are now '|| n || ' rows after update. Old gender: ' || oldGender
|| ', new Gender: ' || newGender);
end if;
End;
`
我知道它与开始后的 select 语句有关,但我还能如何获得行数?
正如@San 指出的,行级触发器persons
一般不能查询persons
table.
您需要两个触发器,一个可以查看新旧性别的行级触发器和一个可以进行计数的语句级触发器。如果您使用 11g,您还可以创建具有行级块和语句级块的复合触发器。
create or replace trigger trg_stmt
after update
on persons
declare
l_cnt integer;
begin
select count(*)
into l_cnt
from persons;
dbms_output.put_line( 'There are now ' || l_cnt || ' rows.' );
end;
create or replace trigger trg_row
after update
on persons
for each row
begin
if( :new.gender != :old.gender )
then
dbms_output.put_line( 'Old gender = ' || :old.gender || ', new gender = ' || :new.gender );
end if;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)