概述
文章目录
- 函数定义的格式
- 触发器的定义格式
- 语句级触发器实例
- 行级触发器实例
函数定义的格式
create or replace function 函数名 (参数名 参数类型,…)
return datatype
is 局部变量
begin
函数体
return 返回值
end 函数名;
触发器的定义格式
触发器往往涉及两个操作/事件,一个主动引发,一个被动自动执行
create or replace trigger 触发器名
before/after/instead of --触发时间
insert/update/delete --触发事件(通常是对数据中的表的操作)
on 表名
begin
触发体(被引发的操作/被动自动执行的操作)
exception
end 触发器名;
分类:
(1)语句级:不管主动执行事件影响到数据库中多少行数据,触发体只被执行一次
(2)行级(for each row):主动执行事件影响到数据库中多少行数据,触发体就执行多少次
语句级触发器实例
对emp表的操作进行记录(只要用户对emp表进行任何操作,都会进行记录)
首先建一个表
create table emp_lg( who varchar2(20),when date);
触发器
create or replace trigger emp_op
before insert or update or delete
on emp
begin
insert into emp_lg(who,when) values(user,sysdate);
end emp_lg;
在这过程中,因为是before,所以只要在操作中,无主键冲突,无编译错误,无其他错误,只要影响到了数据库,就会触发,比如delete一个不存在的值,会被记录,因为它成功执行了,对数据库有了影响(使这个不存在数据库中),还有insert一个有主键错误的,它不会记录,因为没有影响到数据库(没有插入到数据库中),这个影响很有深意,得慢慢琢磨
如果对于某一列进行操作时
before insert or update or delete of 字段名
行级触发器实例
create or replace trigger emp
before insert
on emp
create table emp_log(who varchar2(20),when date);
create or replace trigger emp_op
before insert or update or delete
on emp
for each row
begin
insert into emp_lg(who,when) values(user,sysdate);
end emp_lg;
还可以更精确的记录,在这简单写一下,需要修改表结构,我这没修改了
create or replace trigger emp_op
before insert or update or delete
on emp
declare
v_act varchar2(20);
for each row
begin
if inserting then
v_act:='insert';
elsif updating then
v_act:='updating';
elsif deleting then
v_act:='deleting';
end if;
insert into emp_lg(who,when,action) values(user,sysdate,v_act);
end emp_lg;
最后
以上就是舒心纸鹤为你收集整理的Oracle-函数-语句级触发器-行级触发器的全部内容,希望文章能够帮你解决Oracle-函数-语句级触发器-行级触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复