PLSQL复合触发器

复合触发器范例

create or replace trigger compound_trigger

for insert or update or delete on dept_x

compound trigger

before statement is

begin

dbms_output.put_line('1:before statement.');

end before statement;

before each row is

begin

dbms_output.put_line('2:before each row.');

end before each row;

after each row is

begin

dbms_output.put_line('3:after each row');

end after each row;

after statement is

begin

dbms_output.put_line('4:after statement.');

end after statement;

end;

/

select * from dept_x;

    DEPTNO DNAME   LOC

---------- -------------- -------------

10 ACCOUNTING   NEW YORK

20 RESEARCH   DALLAS

30 SALES   CHICAGO

40 OPERATIONS   BOSTON

delete dept_x;

1:before statement.

2:before each row.

3:after each row

2:before each row.

3:after each row

2:before each row.

3:after each row

2:before each row.

3:after each row

4:after statement.

4 rows deleted.

复合触发器范例

create or replace trigger compound_trigger

        for insert or update or delete on dept

        compound trigger

                before each row is

                begin

                        if inserting then

                                if :new.dname is null then

                                        :new.dname:='VDEDU';

                                END IF;

                                if :new.loc is null then

                                        :new.loc:='china';

                                end if;

                        end if;

end before each row;

end;

/

drop trigger compound_trigger;删除触发器

创建一个日志表,记录dept表的DML操作

create table dept_log(logid number,type varchar2(50),logdate date,deptno number,dname varchar2(50),loc varchar2(50));

create sequence dept_log_seq;

create or replace trigger dept_update_trigger10

before insert or update or delete

on dept

for each row

begin

if inserting then

insert into dept_log(logid,type,logdate,deptno,dname,loc)

values(dept_log_seq.nextval,'insert',sysdate,:new.deptno,:new.dname,:new.loc);

elsif updating then

insert into dept_log(logid,type,logdate,deptno,dname,loc)

values(dept_log_seq.nextval,'update',sysdate,:new.deptno,:new.dname,:new.loc);

else

insert into dept_log(logid,type,logdate,deptno,dname,loc)

values(dept_log_seq.nextval,'delete',sysdate,:old.deptno,:old.dname,:old.loc);

end if;

end;

/

原文地址:https://www.cnblogs.com/kawashibara/p/9047586.html