oracle学习第八章-触发器和内置程序包PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在模式中执行 DDL 语句时执行
• 数据库级触发器
在发生打开、关闭、登录和退出数据库等 系统事件时执行
• DML 触发器
在对表或视图执行DML语句时执行
• 语句级触发器
无论受影响的行数是多少,都只执行一次 对DML语句修改的每个行执行一次
• 行级触发器 • INSTEAD OF 触发器
用于用户不能直接使用 DML 语句修改的 视图
6
.
触发器的组成部分 3-1
触发器由三部分组成: 触发器语句(事件)
定义激活触发器的 DML 事件和 DDL 事件
触发器限制
执行触发器的条件,该条件必须为真才能激活触 发器
触发器操作(主体)
包含一些 SQL 语句和代码,它们在发出了触发器 语句且触发限制的值为真时运行
7
.
触发器的组成部分 3-2
特定事件可以是执行更新的DML语句和DDL语句 触发器不能被显式调用 触发器的功能:
自动生成数据 自定义复杂的安全权限 提供审计和日志记录 启用复杂的业务逻辑
5
.
创建触发器的语法
CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS] new}] [FOR EACH ROW] [WHEN (condition)] pl/sql_block;
BEGIN IF UPDATING THEN DBMS_OUTPUT.PUT_LINE(‘已更新 ORDER_MASTER 中的数据'); ELSIF DELETING THEN DBMS_OUTPUT.PUT_LINE(‘已删除 ORDER_MASTER 中的数据'); ELSIF INSERTING THEN DBMS_OUTPUT.PUT_LINE(‘已在 ORDER_MASTER 中插入数据'); END IF;
触发器语限操句百度文库作
SSQQLL>> SQL>
C…A……FWDS…BEsDROFaENEHalBTEGCDR_lE_EMAdL;INdENiTRAfSifAfER(f_UNN:C=OEOPUEH:UNRDMWRTEABR.POeWTEEUmEW.RPeTpO;mL.sPAFapUCls>eTaEOm_l-LTLp:ODIsRNaL.IeEGlDmO(G.‘e工pNEms资Rsapals)差tlraaiglr额;y__s:rae’lcosradls_diff);
只有在WHEN子句中的条 在如足更果,新W将为件eH执smE得a行pNltat到r_rB子irigsgyE满a__-句Gslr足ae列中INlc时之触o的块r,d后发条中s才激器件表的激活得创代活触到建码发满器
8
.
触发器的组成部分 3-3
ABEFTFEORRE触触发发器器的的工工作作原原理理
更新
Oracle
表
激保活存更新 触发器
数据库
激活 保存更新
触发器
Oracle 数据库
9
.
创建触发器
CREATE OR REPLACE TRIGGER aiu_itemfile AFTER INSERT ON itemfile FOR EACH ROW BEGIN
IF (:NEW.qty_hand = 0) THEN DBMS_OUTPUT.PUT_LINE('警告:已插入记录,但数量为零');
12
.
触发器类型 6-3
行级触发器
SQL> CREATE TABLE TEST_TRG (ID NUMBER, NAME VARCHAR2(20));
SQL> CREATE SEQUENCE SEQ_TEST; SQL> CREATE OR REPLACE TRIGGER BI_TEST_TRG BEFORE INSERT OR UPDATE OF ID ON TEST_TRG FOR EACH ROW BEGIN
ELSE DBMS_OUTPUT.PUT_LINE(‘已插入记录');
END IF; END; /
10
.
触发器类型 6-1
触发器的类型有:
触发器类型
模式(DDL) 触发器
数据库级 触发器
DML 触发器
行级触发器 语句级触发器 INSTEAD OF触发器
11
.
触发器类型 6-2
• DDL 触发器
END; /
14
.
触发器类型 6-5
INSTEAD OF 触发器
SQL> CREATE OR REPLACE TRIGGER upd_ord_view INSTEAD OF UPDATE ON ord_view FOR EACH ROW BEGIN UPDATE order_master SET vencode=:NEW.vencode WHERE orderno = :NEW.orderno; DBMS_OUTPUT.PUT_LINE(‘已激活触发器'); END; /
IF INSERTING THEN SELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;
ELSE RAISE_APPLICATION_ERROR(-20020, '不允许更新ID值!');
END IF; END; /
13
.
触发器类型 6-4
语句级触发器
SQL> CREATE OR REPLACE TRIGGER trgdemo AFTER INSERT OR UPDATE OR DELETE ON order_master
序设计、信息隐藏、新增功能以及性能更佳
2
.
目标
理解和应用触发器(重点) ----------------------------------- 了解内置程序包
3
专业英语
Trigger Reference
.
引发, 引起, 触发,板机 提及, 涉及, 参考, 参考书目
4
.
触发器
触发器是当特定事件出现时自动执行的存储过 程
.
第八章
触发器和内置程序包
.
回顾
子程序是命名的 PL/SQL 块,存储在数据库中, 可带参数并可在需要时随时调用
有两种类型的PL/SQL子程序,即过程和函数 过程用户执行特定的任务,函数用于执行任
务并返回值 程序包是对相关类型、变量、常量、游标、
异常、过程和函数等对象的封装 程序包由两部分组成,即包规范和包主体 使用程序包的优点是:模块化、更轻松的程