我写的语句如下:[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;

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

posted on 2012-07-27 11:27  junney_dream  阅读(131)  评论(0编辑  收藏  举报