我是靠谱客的博主 舒心纸鹤,最近开发中收集的这篇文章主要介绍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表进行任何操作,都会进行记录)
首先建一个表

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-函数-语句级触发器-行级触发器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部