读书人

Oracle数据库中的函数包跟触发器

发布时间: 2013-10-03 17:28:15 作者: rapoo

Oracle数据库中的函数,包和触发器
函数:函数和存储过程非常的相似,唯一的不同就是函数具有返回值。而存储过程是没有返回值的。函数的定义:在pL/Sql developer工具左侧选择“Function”,右键新建就行。在弹出的框中输入函数名和返回值(返回值是必须的),参数可以不写。定义如下,创建一个无参的函数:

一个简单的入门案例:

before和after指出触发器的触发时序分别是前触发和后触发方式,前触发是在执行触发事件之前触发当前所创建的触发器,后触发式在执行触发事件之后执行当前创建的触发器。就有点像Spring的Aop编程的advice,前置通知和后置通知。for each row:表示触发器是行级触发器。行级触发器和语句触发器的区别在:行级触发器要求当一个DML语句操作影响数据库中的多行数据时,对于其中的每一个数据行,只要他们符合触发约束条件,均激活一次触发器。而语句级将整个语句操作作为触发事件,当它符合约束条件时,激活一个触发器。Row:为语句级触发。 Oracle数据库中的函数,包跟触发器 。在例子中会说明。看一下示例:
/**创建一个触发器't_back_tab_sut'当表tab_stu中的记录执行删除操作之后执行**/create or replace trigger t_back_tab_sut  after delete on tab_stu   --当行级触发器被触发时,如果要访问插入,更新或删除的记录中的值。可以使用  --NEW:访问操作完成后的值。  --Old:访问操作完成前的值。  --也就是可以取到你插入或更新或删掉的新或旧的数据。  referencing  new as new  old as old  for each row --表示触发器是行级触发器declare  r_tab_stu tab_stu%rowtype;  begin  --取到删除后的数据  r_tab_stu.stu_id:=:old.stu_id;  r_tab_stu.stu_name:=:old.stu_name;  r_tab_stu.stu_age:=:old.stu_age;  r_tab_stu.class_id:=:old.class_id;  --插入到备份表中  insert into tab_stu_back2(stu_id,stu_name,stu_age,class_id)   values(r_tab_stu.stu_id,r_tab_stu.stu_name,r_tab_stu.stu_age,r_tab_stu.class_id);  --这里不能有commit语句  --因为如果这里有commit的话,那用户执行的delete操作就不能回滚了。  --可以理解为这里的insert和用户的delete语句是一个事务。end t_back_tab_sut;

当删除tab_stu中的数据,就会备份到tab_stu_back2表中。

读书人网 >其他数据库

热点推荐