触发器-2

原创 2012年03月22日 10:20:16

---行触发器

 

------------------------------------------------------
第一部分:before触发器
------------------------------------------------------


--案例01:新建一个使用属性:new的insert触发器
create or replace trigger tr01
before insert on student
for each row   --必须是行级触发器
begin
  dbms_output.put_line('这个是行前触发器!');
  dbms_output.put_line('new id:' || :new.stuid);
  dbms_output.put_line('student name:' || :new.stuname);
  dbms_output.put_line('student sex:'  || :new.sex);
end;


--案例02:新建一个使用属性:old的delete触发器
create or replace trigger tr01
before delete on student
for each row   --必须是行级触发器
begin
  dbms_output.put_line('这个是行前触发器!');
  dbms_output.put_line('old id:  ' ||:old.stuid);
  dbms_output.put_line('old name:  ' ||:old.stuname);
  dbms_output.put_line('old sex:  ' ||:old.sex);
end;

--案例03:新建一个使用属性:old和:new的update触发器
create or replace trigger tr01
before update on student
for each row   --必须是行级触发器
begin
  dbms_output.put_line('这个是行前触发器!');
  dbms_output.put_line('下面是你新更新时删除的值');
  dbms_output.put_line('old id:'  || :old.stuid);
  dbms_output.put_line('old name:'  || :old.stuname);
  dbms_output.put_line('old sex:'  || :old.sex);
   dbms_output.put_line('*****************************');
  dbms_output.put_line('下面是你新插入的值');
 dbms_output.put_line('new id:' || :new.stuid);
  dbms_output.put_line('new name:' || :new.stuname);
  dbms_output.put_line('new sex:' || :new.sex);
end;


--案例04:新建一个使用条件的触发器
create or replace trigger tr01
before delete on student
for each row   --必须是行级触发器
when (old.sex='男')  /*这里old前面不能使用冒号只有在主体部分才允许使用冒号*/
begin
  dbms_output.put_line('这个是行前触发器!');
  dbms_output.put_line('old id' ||:old.stuid);
  dbms_output.put_line('old name' ||:old.stuname);
  dbms_output.put_line('old sex' ||:old.sex);
end;

--案例05:
create or replace trigger tr01
before insert or delete or update of sid
on apple
for each row
begin
if inserting then
 dbms_output.put_line('数据将要插入,请注意查收!');
 dbms_output.put_line('请求正在执行,请稍候....................');
        dbms_output.put_line('.........................................');
elsif deleting then
    begin
        dbms_output.put_line('apple表中的数据'||:old.sid||'将被删除!');
 dbms_output.put_line('请求正在执行,请稍候....................');
        dbms_output.put_line('.........................................');
 end;
elsif   updating then
 begin
 dbms_output.put_line('apple表中的数据'||:old.sid||'将被删除!');
        dbms_output.put_line('请求正在执行,请稍候....................');
        dbms_output.put_line('.........................................');
 dbms_output.put_line('apple表中的数据'||:new.sid||'将被插入!');
        dbms_output.put_line('请求正在执行,请稍候....................');
        dbms_output.put_line('.........................................');
 end;
else
 dbms_output.put_line('未知的错误!请核实再操作!');
end if;
end;

 

--案例06:
create or replace trigger tr02
after insert or delete or update of sid
on apple
for each row
begin
if inserting then
 dbms_output.put_line('数据已经插入,请注意查收!');
elsif deleting then
    begin
        dbms_output.put_line('apple表中的数据'||:old.sid||'已经被删除!');
 end;
elsif   updating then
 begin
 dbms_output.put_line('apple表中的数据'||:old.sid||'已经被删除!');
 dbms_output.put_line('apple表中的数据'||:new.sid||'已经被插入!');
 end;
else
 dbms_output.put_line('未知的错误!请核实再操作!');
end if;
end;


--案例07:监视用户登录数据库信息

create table user_login_information
(
who varchar2(30),
when  date,
action varchar2(20)
);

--方法01:
create or replace trigger tr_user_login
before insert or update or delete
on apple
declare
in_action  user_login_information.action%type;
begin
 if inserting then
 begin
  in_action:='插入';
  dbms_output.put_line('用户对表apple进行了插入操作!');
 end;
 elsif updating then
 begin
  in_action:='更新';
  dbms_output.put_line('用户对表apple进行了更新操作!');
 end;
 elsif deleting then
 begin
 in_action:='删除';
  dbms_output.put_line('用户对表apple进行了删除操作!');
 end;
 end if;
insert into user_login_information(who, when, action) values (USER,SYSDATE,in_action);
end;
 
--方法02:
create or replace trigger tr_user_login
before insert or update or delete
on apple
declare
in_action  user_login_information.action%type;
begin
 case
 when inserting then
 begin
  in_action:='插入';
  dbms_output.put_line('用户对表apple进行了插入操作!');
 end;
 when updating then
 begin
  in_action:='更新';
  dbms_output.put_line('用户对表apple进行了更新操作!');
 end;
 when deleting then
 begin
 in_action:='删除';
  dbms_output.put_line('用户对表apple进行了删除操作!');
 end;
 end case;
insert into user_login_information(who, when, action) values (USER,SYSDATE,in_action);
end;

 

 

--案例08:新建一个混合触发器01
(1)新建一个表

create table deltable as select * from student where stuid='';

(2)新建一个混合触发器
create or replace trigger tr03
before insert or update or delete on student
for each row
begin
 if inserting then
                 insert into deltable values(:new.stuid, :new.stuname, :new.sex);
                end if;
 if deleting then
   insert into deltable values (:old.stuid, :old.stuname, :old.sex);
 end if;         
exception
 when others then
dbms_output.put_line('不可预知的错误!');
end;


--案例09:新建一个混合触发器02
(1)新建一个表

create table deltable as select * from student where stuid='';

create table updtable as select * from student where stuid='';

create table intable as select * from student where stuid='';

(2)新建一个混合触发器
create or replace trigger tr03
before insert or update or delete on student
for each row
begin
 if inserting then
                 insert into intable values(:new.stuid, :new.stuname, :new.sex);
                end if;
 if deleting then
   insert into deltable values (:old.stuid, :old.stuname, :old.sex);
 end if;     
 if updating then
                     insert into updtable values(:new.stuid, :new.stuname, :new.sex);
                     insert into updtable values (:old.stuid, :old.stuname, :old.sex);
 end if;
exception
 when others then
dbms_output.put_line('不可预知的错误!');
end;

 

--案例10:新建一个混合触发器03
(1)新建一个表

create table deltable as select * from student where stuid='';

create table updtable as select * from student where stuid='';

create table intable as select * from student where stuid='';

(2)新建一个混合触发器
create or replace trigger tr03
before insert or update or delete on student
for each row
begin
 if inserting then
                 insert into intable values(:new.stuid, :new.stuname, :new.sex);
                 dbms_output.put_line('数据插入成功!');
                end if;
 if deleting then
   insert into deltable values (:old.stuid, :old.stuname, :old.sex);
   dbms_output.put_line('数据删除成功!');
 end if;     
 if updating then
                     insert into updtable values(:new.stuid, :new.stuname, :new.sex);
                     insert into updtable values (:old.stuid, :old.stuname, :old.sex);
      dbms_output.put_line('数据更新成功!');
 end if;
exception
 when others then
dbms_output.put_line('不可预知的错误!');
end;

 

 

 

版权声明:日常札记,乐于分享

MySQL触发器-条件触发器语法

文章为作者原创,未经许可,禁止转载。    -Sun Yat-sen University 冯兴伟 实验4 触发器 (1)实验目的 掌握数据库触发器的设计和使用方法 (2)实验...
  • qq_27088383
  • qq_27088383
  • 2017年06月20日 21:39
  • 640

数字电路笔试题目

1、同步电路和异步电路的区别是什么?(仕兰微电子)   2、什么是同步逻辑和异步逻辑?(汉王笔试)   同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。   3、什么是"线...
  • Dallin0408
  • Dallin0408
  • 2015年10月06日 09:35
  • 2498

MySQL——触发器的创建和使用总结

什么是触发器 触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,...
  • Goskalrie
  • Goskalrie
  • 2016年11月03日 13:34
  • 20083

什么是MySQL触发器

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。利用MySQL触发器可以对表进行增、删、改操作同时响应另一张表做出相同的操作。下面简单介绍一下MySQL触发器的基本语法。 如何创建...
  • dongsg11200
  • dongsg11200
  • 2013年08月16日 23:33
  • 2836

Oracle触发器和MySQL触发器之间的区别

Oracle触发器格式: CREATE [OR REPLACE] TRIGGER trigger_name BEFORE|AFTER INSERT|UPDATE|DELETE ON table...
  • a19881029
  • a19881029
  • 2014年07月16日 16:31
  • 3836

MySQL5.6 触发器的使用(条件分支、变量的使用)

use fs; /*product_info表中,仪器和试剂一定是不同的产品,id上不可能重复,可以放心删*/ create trigger check_record_delete_tri...
  • zhouyingge1104
  • zhouyingge1104
  • 2014年07月07日 20:11
  • 23923

被Oracle触发器给坑了

例行检查数据库AWR报告,有一条update语句执行多次,每次执行时间30多秒,这条SQL语句很简单,就是根据主键条件修改数据,主键个数是1到100之间。这个问题由来已久,只是偶尔出现。主键是varc...
  • guogang83
  • guogang83
  • 2014年11月11日 09:02
  • 3146

sql server触发器实现插入时操作另一张表

以前都是也得mysql,现在写sqlserver的触发器,感觉改动还是蛮大的 1.定义变量 #在mysql中变量直接这么定义就可以了 SET @VALUE = "111"; #在sql serv...
  • luo4105
  • luo4105
  • 2016年05月08日 19:23
  • 3046

浅谈触发器使用

个人重构时看有人登录时使用触发器,当时我是用存储过程+事务实现的,也没有进一步思考,表面理解触发器就是由一个事件触发另一个事件,存储过程也是封装了一组sql语句,再加上事务的一致性原则,也可以达到一个...
  • u010097777
  • u010097777
  • 2014年10月30日 11:27
  • 2122

在PLSQL工具中如何调试oracle的触发器

本文仅仅是简单的介绍如何调试触发器,小编本人也是不建议程序中使用触发器的,因为触发器的使用给维护带来了很大的很大的不便,谨以此文总结一些触发器的调试。使用到的数据库为oracle数据库,使用的数据库连...
  • u013058618
  • u013058618
  • 2016年10月30日 22:57
  • 5088
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:触发器-2
举报原因:
原因补充:

(最多只允许输入30个字)