ORACLE触发器、内置程序包教学

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 第8章触发器、内置程序包

1、技术目标

∙应用触发器

∙使用内置程序包

2、什么是触发器

∙触发器是当特定事件出现时自动执行的存储过程

∙特定事件可以是执行更新的DML语句和DDL语句

∙触发器不能被显式调用,存储过程可以显示调用

触发器的功能有:

∙自动生成数据

∙自定义复杂的安全权限

∙提供审计和日志记录

∙启用复杂的业务逻辑

触发器可以与特定的表或视图相关联,用于检查对表/视图所做的数据修改,

当执行insert、delete、update语句时,可激活触发器代码

3、如何创建触发器

创建触发器的语法为:

CREATE [OR REPLACE] TRIGGER trigger_name {AFTER | BEFORE | INSTEAD OF}

{insert | delete | update [OF column[, column] ...]} [OR {insert | delete | update [OF column[, column] ...] }] ON

[schema.]table_or_view_name

[REFERENCING [NEW AS new_row_name] [OLD AS

old_row_name]]

[FOR EACH ROW]

[WHEN (condition)]

[DECLARE

variable_declation]

BEGIN

statements;

[EXCEPTION

exception_handlers]

END [trigger_name];

语法说明:

AFTER | BEFORE,指在事件发生之前或之后激活触发器INSTEAD OF,表示可以执行触发器代码来代替导致触发器调用的事件

insert | delete | update,指定构成触发器事件的数据操纵类型,update可指定列列表

REFERENCING,指定新行(即将更新)和旧行(更新前)的其他名称,默认为NEW和OLD

table_or_view_name,指要创建触发器的表或视图的名称

FOR EACH ROW,指定是否对受影响的每行都执行触发器,即行级触发器,

如不使用此句,则为语句级触发器

WHEN,限制执行触发器的条件,该条件可包括新旧数据值的检查DECLARE...END,一个标准的PL/SQL块

使用:在Emp表创建触发器,

Sql代码

1.CREATE OR REPLACE TRIGGER biu_emp_deptno

2.--在添加或修改deptNo字段之前触发

3.BEFORE INSERT OR UPDATE OF deptNo

4.ON Emp

5.--行级触发器

6.FOR EACH ROW

7.--列deptNo的新值不等于40

8.WHEN (New.deptNo <> 40)

9.BEGIN

10.--将comm列设置为0

11.:m := 0;

12.END;

13./

注意:使用SHOW ERRORS命令可查看创建触发器时出现的错误

4、触发器的组成部分

触发器由以下3个部分组成:

触发语句,定义激活触发器的DML 事件和DDL 事件,如:BEFORE INSERT OR UPDATE OF deptNo

ON Emp

--行级触发器

FOR EACH ROW

这段代码表示,当对Emp表执行insert语句或对Emp表的deptNo列执行update语句时,触发器会在受影响的每一行

上执行一次

触发限制,执行触发器的条件,该条件必须为真才能激活触发器,如:

--列deptNo的新值不等于40,触发器会执行

WHEN (New.deptNo <> 40)

触发操作,一些SQL 语句和代码,在发出了触发器语句且触发限制的值为真时运行,如:

BEGIN

--将comm列设置为0

:m := 0;

END;

5、触发器的类型及使用

触发器有如下的类型:

每种触发器的作用:

使用1:应用行级触发器,

Sql代码

1.--创建表TEST_TRG

2.CREATE TABLE TEST_TRG (ID NUMBER, NAME VARCHAR2(20));

3.--创建序列SEQ_TEST

4.CREATE SEQUENCE SEQ_TEST;

5.--为TEST_TRG表创建行级触发器

6.CREATE OR REPLACE TRIGGER BI_TEST_TRG

7.--在insert(添加)或者update(修改)ID字段时触发

8.BEFORE INSERT OR UPDATE OF ID

9.ON TEST_TRG --指定TEST_TRG表

10.FOR EACH ROW --设置为行级触发器

11.--触发器语句部分

12.BEGIN

13.--判断是不是insert语句

14.IF INSERTING THEN

15.--如果是insert操作,将序列的值设置给ID列

16.SELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;

相关文档
最新文档