after触发器和after行触发器

我写的语句如下:[emp是scott用户下默认就有的表]

(1).after语句触发器

create table aud_upd_tab(
host varchar2(30),statement varchar2(100),exectime date);

create or replace trigger tr_upd_emp
after update on emp
declare
sql_txt ora_name_list_t;
v_stmt varchar2(100);
n binary_integer;
begin
n :=ora_sql_txt(sql_txt);
for i in 1..n loop
v_stmt :=v_stmt||sql_txt(i);
end loop;
insert into aud_upd_tab values(sys_context('userenv','host'),v_stmt,sysdate);
end;
/

update emp set sal=30 where empno=7369;

执行上面的update语句则报错如图片所示:


select statement,exectime from aud_upd_tab;

(2)after行触发器

create table audit_emp_change(name varchar2(10),oldsal number(6,2),
newsal number(6,2),time DATE);

create or replace trigger tr_sal_change
after update of sal on emp for each row
declare
v_temp int;
begin
select count(*) into v_temp from audit_emp_change where name=:old.ename;
if v_temp=0 then
insert into audit_emp_change values(:old.ename,:old.sal,:new.sal,sysdate);
else
update audit_emp_change set oldsal=:old.sal,newsal=:new.sal,time=sysdate where name=:old.ename;
end if;
end;
/
update emp set sal=sal*1.1 where empno=7369;

执行上面的update语句则报错如图片所示:


select * from audit_emp_change;

希望各位大侠帮帮忙,很急哦!

转载于:https://www.cnblogs.com/Junney2012/archive/2012/07/27/2611465.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值