ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 触发器

触发器

原创 Linux操作系统 作者:周应侯 时间:2010-10-22 14:28:48 0 删除 编辑

Oracle 10G 数据库系统学习笔记《触发器》2008-09-18 19:29事务操作命令

SQL> rollback

SQL> commit

.

行级触发器

SQL> create or replace trigger del_table1
after delete on table1
for each row
begin
delete from table2 where table1_id=:old.id;
end;
/

SQL> create or replace trigger insert_table1
after insert on table1
for each row
begin
insert into table2(id,name,table1_id) valures(myseq.nextval,'test',:new.id);
end;
/

SQL> create or replace trigger update_table1
after update on table1
for each row
begin
update table2 set table1_id=:new.id where table1_id=:old.id;
end;
/

SQL> create or replace trigger table1_delete
after delete on table1
for each row
begin
if :old.id='001' then   //不允许删除id为‘001’的记录
raise_application_error(-20000,'不允许删除!');   //错误号范围-29999至-20000
end if;
end;
/

.

SQL> create table mylog(
curr_user varchar2(100),
curr_date date,
act char(1));

语句级触发器

SQL> create or replace trigger dml_table1
after insert or delete or update on table1
begin
if inserting then
insert into mylog values(user,sysdate,'I');
elsif deleting then
insert into mylog values(user,sysdate,'D');
else
insert into mylog values(user,sysdate,'U');
end if;
end;
/

结合触发器利用序列实现表中整型字段的自增

SQL> create or replace trigger set_no
before insert on table1
for each row
declare
sn number(5);
begin
select myseq.nextval into sn from dual;
:new.id:=sn;
end;
/

替换触发器可解决视图的多表更新问题(替换触发器只能建在视图上)

SQL> create or replace trigger trigger_view_table1_table2
instead of insert on view_table1_table2
for each row
begin
insert into table1 values(:new.id, :new.name);
insert into table2 values(:new.tid, :new.tname, :new.id);
end;
/

SQL> insert into view_table1_table2 values(12,'t2',34,'t1'
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22815499/viewspace-676549/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Oracle逻辑结构
请登录后发表评论 登录
全部评论

注册时间:2009-11-03

  • 博文量
    56
  • 访问量
    151984