复合触发器范例
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;
/