oracle触发器

1. 什么是触发器?

当用户满足某一条件(如:登陆数据库, insert, update, delete,create等等)时, 会引起某个存储过程的

自动执行, 我们把这个隐含被调用的存储过程就称为触发器.

2.触发器的分类

dml触发器 # insert delete update

ddl触发器 # create table; create view; drop...

系统触发器 # 与系统行为有关的触发器, 如登陆, 退出, 启动/关闭数据库等

3.创建触发器

create or replace trigger trigger_name # trigger_name为自定义的触发器名称

{ before | after } # 设定在之前/之后触发

{ insert|delete|update [of column1, column2]} # 设定触发的条件

on 方案.表名 # 方案即用户空间

[for each row] # 设定行级触发器, 如没有则为语句级触发器

[when condition]

begin

这里放触发器执行时要干的事 # 如: dbms_output.put_line('输出内容到窗口')

if 条件 then dbms_output.put_line('输出内容到窗口')

RAISE_APPLICATION_ERROR(-2000, '描述') # 用来阻止触发条件的继续执行

end if;

end;

补充: RAISE_APPLICATION_ERROR这个是oracle定义的用来抛异常的函数, 它有两个参数

第一个是错误号, 自定义,范围(-20000至-20999), 第二个是提示信息.

4.行级触发器和语句级触发器:

行级触发器: 涉及多少行就触发执行多少次;

语句级触发器: 只会在执行触发语句时触发一次, 不论涉及到多少行.

5.谓词的使用(inserting, updating, deleting)

create or replace trigger trigger_name

before

insert or update or delete on

scott.emp # 这里用来指定哪个用户的哪个表

begin

case

when inserting then

dbms_output.put_line('不能添加')

RAISE_APPLICATION_ERROR(-20001, '不能添加')

when updating then

dbms_output.put_line('不能更新')

RAISE_APPLICATION_ERROR(-20002, '不能更新')

when deleting then

dbms_output.put_line('不能删除')

RAISE_APPLICATION_ERROR(-20003, '不能删除')

end case;

end;

6.:new和:old的使用. 这两能代指新值和原值, 使用时必须指定为行级触发器, 下图中忘记加了

![]()

  1. 让触发器中put_line内容输出到窗口办法:

    命令行输入set serveroutput on;

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。