我是靠谱客的博主 舒心纸鹤,这篇文章主要介绍Oracle-函数-语句级触发器-行级触发器,现在分享给大家,希望可以做个参考。

文章目录

    • 函数定义的格式
    • 触发器的定义格式
    • 语句级触发器实例
    • 行级触发器实例

函数定义的格式

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表进行任何操作,都会进行记录)
首先建一个表

复制代码
1
2
create table emp_lg( who varchar2(20),when date);

触发器

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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一个有主键错误的,它不会记录,因为没有影响到数据库(没有插入到数据库中),这个影响很有深意,得慢慢琢磨
如果对于某一列进行操作时

复制代码
1
2
before insert or update or delete of 字段名

行级触发器实例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;

还可以更精确的记录,在这简单写一下,需要修改表结构,我这没修改了

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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-函数-语句级触发器-行级触发器内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(114)

评论列表共有 0 条评论

立即
投稿
返回
顶部