程序人生

致力于MicroSoft Borland Sybase Oracle技术的研究

导航

【转贴】Oracle触发器


对修改表的时间、人物进行日志记录。

 

1、 建立试验表

create table employees_copy as select *from hr.employees

 

2、 建立日志表

create table employees_log(

        who varchar2(30),

        when date);

 

3、 在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。

Create or replace trigger biud_employee_copy

              Before insert or update or delete

                     On employees_copy

       Begin

              Insert into employees_log(

                     Who,when)

              Values( user, sysdate);

            

       End;

       /

4、 测试

update employees_copy set salary= salary*1.1;

 

select *from employess_log;

 

5、 确定是哪个语句起作用?

即是INSERT/UPDATE/DELETE中的哪一个触发了触发器?

可以在触发器中使用INSERTING / UPDATING / DELETING 条件谓词,作判断:

begin

        if inserting then

               -----

        elsif updating then

               -----

        elsif deleting then

               ------

        end if;

end;

 

if updating(‘COL1’) or updating(‘COL2’) then

        ------

end if;

 

[试验]

1、 修改日志表

alter table employees_log

        add (action varchar2(20));

 

2、 修改触发器,以便记录语句类型。

Create or replace trigger biud_employee_copy

              Before insert or update or delete

                     On employees_copy

       Declare

              L_action employees_log.action%type;

       Begin

        if inserting then

               l_action:=’Insert’;

        elsif updating then

               l_action:=’Update’;

        elsif deleting then

               l_action:=’Delete’;

        else

               raise_application_error(-20001,’You should never ever get this error.’);

 

              Insert into employees_log(

                     Who,action,when)

              Values( user, l_action,sysdate);

       End;

       /

 

3、 测试

insert into employees_copy( employee_id, last_name, email, hire_date, job_id)

       values(12345,’Chen’,’Donny@hotmail’,sysdate,12);

 

select *from employees_log

posted on 2007-05-07 20:54  yoyo918  阅读(911)  评论(0)    收藏  举报