Oracle数据库开发实用教程第7章ppt课件_第1页
Oracle数据库开发实用教程第7章ppt课件_第2页
Oracle数据库开发实用教程第7章ppt课件_第3页
Oracle数据库开发实用教程第7章ppt课件_第4页
Oracle数据库开发实用教程第7章ppt课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 PL/SQL包与触发器学习要点创建包调用和执行包组件建立DML触发器建立INSTEAD OF 触发器. 本章主要内容 创建包调用和执行包组件触发器引见建立DML触发器建立INSTEAD OF 触发器触发器的维护.7.1 创建包包是由存储在一同的相关对象组成的PL/SQL存储程序。它可以把相关的过程、函数组织在一同,这样便于管理,提高了代码性能。 包由两个分别的部件组成:包头和包体。包头也叫包阐明或包规范,它包括函数头、过程头、和外部可视数据构造。在创建包时,普通先建立包头,再建立包体。.7.1.1 包头包头用于定义包的公用组件,如:常量、类型、变量、游标、过程和函数等。创建包必需首先创

2、建包规范,创建包规范的语法如下:CREATE OR REPLACE PACKAGE package_nameAS|ISpublic_variable_declarations |public_type_declarations |public_exception_declarations |function_declarations |procedure_specificationsEND package_name其中:package_name:包名。public_variable_declarations:公共变量声明。public_type_declarations:公共类型声明publi

3、c_exception_declarations:公共异常声明。function_declarations:函数声明。procedure_specifications:过程声明。.7.1.2 包体包体用于实现包头所定义的过程和函数。关于包的根本规那么如下:1在包头声明过的是外部可以调用的过程、函数、变量。在包头中定义的一切的常量、变量、过程和函数等都是公有的;就是说在包头内定义的公有组件常量、变量、过程和函数既可以在包内运用也可以在包外部调用。2在包体内也可以定义过程、函数、变量,但这些定义只能在包体内可见。在包体内的各个过程和函数本身定义的处置和变量都是私有的。就是说在包体中定义的私有组件常

4、量、变量、过程和函数都只能在包内运用,不能由其他子程序调用。3在包中声明的时候,必需是前向声明的,也就是对象需求援用的另一个对象必需在前面首先声明。4包头是必需存在的,包体是可选的。5包头必需在包体前创建,否那么创建不了包体。6只在包头中包括公用变量、过程、函数的声明 .创建包体运用CREATE PACKAGE BODY语句:CREATE OR REPLACE PACKAGE BODY package_nameAS|ISprivate_variable_declarations |private_type_declarations |private_exception_declarations

5、 |private_cursor_declarations | function_declarations |procedure_specificationsEND package_name.7.2 调用和执行包组件调用方法分为包内调用和包外调用。1包内调用【例】在过程addemp中对validate过程进展包内调用。CREATE OR REPLACE PACKAGE BODY mypackageISPROCEDURE addemp(eno NUMBER,name VARCHAR2,sal NUMBER, dno NUMBER) IS BEGIN IF validate (dno) THEN

6、INSERT INTO emp(empno, ename, sal, deptno) VALUES(eno,name,sal,dno); ELSE raise_application_error(-200010,不存在该部门); END IF;EXCEPTION WHEN DUP_VAL_ON_INDEX THEN raise_application_error(-200012, 该员工曾经存在,反复插入); END mypackage;.2调用包的公共变量包名:mypackage,公共变量pub_pSQLEXEC mypackage.pub_p := 20;.3调用包的公共过程包名:mypa

7、ckage,公共过程:addemp( eno NUMBER, name VARCHAR2, sal NUMBER, dno NUMBER)SQLEXEC mypackage. addemp( 1111, SCOTT, 5600);SQLEXEC mypackage. addemp( 1111, SCOTT, 5600, 88);.4调用包的公共函数包名:mypackage,公共函数:get_sal(eno NUMBER)功能:把员工号eno作为输入参数,得到此员工的工资,前往一个NUMBER 类型的数据。SQLVAR salary NUMBERSQLEXEC :salary := mypack

8、age. get_sal(9012);SQLPRINT salary执行结果:SALARY-5600.7.3 触发器引见7.3.1 触发器的作用与特点触发器的主要作用是可以实现由主建和外键所不能保证的参照完好性和数据的一致性。除此之外,触发器还有许多不同的作用:1强化约束。触发器可以实现比CHECK 语句更为复杂的约束。2跟踪变化。触发器可以侦测数据库内部的操作,在没有更新权限的情况下不允许对数据库进展更新操作。3平安性。可以基于数据库的值运用户具有操作数据库的某种权益。例如:可以基于时间限制用户的操作,例如,不允许下班后和节假日修正数据库数据;可以基于数据库中的数据限制用户的操作,例如,不允

9、许股票的价钱的升幅一次超越10%;审计。可以跟踪用户对数据库的操作,审计用户操作数据库的语句,把用户对数据库的更新写入审计表。4自动生成导出的列值。5防止无效的事务。6在分布式数据库中实施跨越结点的参照完好性。7提供透明事件日志。.7.3.2 触发器的类型和组成1触发器的类型对每一触发语句可有四种类型触发器:1行触发器。对受触发语句所影响的每一行进展触发。2语句触发器。定义语句触发器时要指定触发时间,即触发器是在触发语句执行之后触发还是在之前触发。3BEFORE触发器。该触发器执行触发器动作是在触发语句执行之前。4AFTER触发器。该触发器执行触发器动作是在触发语句执行之后。.2触发器的组成一

10、个触发器有三个根本部件:触发事件或语句、触发器条件、触发器动作。触发事件是指引起触发器激发的事件。触发语句指数据支配DML语句,这些语句是INSERT、UPDATE或DELETE语句。触发器条件是一个布尔表达式。触发器的动作是一个PL/SQL块过程,由SQL语句和PL/SQL语句组成。触发语句发出后,当触发器的条件为TRUE时,它被执行。.7.4 建立DML 触发器DML事件触发器可以是语句或行级触发器。DML语句触发器在触发语句之前或之后触发。DML行级触发器在语句影响的行变化之前或之后触发。用户可以给单一事件和类型定义多个触发器,但没有任何方法可以加强多触发器触发的命令。.7.4.1 语句

11、触发器创建触发器的语法如下:CREATE OR REPLACE TRIGGER 触发器名 触发时间 触发事件ON 表名FOR EACH ROWPL/SQL 语句其中:1触发器名。触发器对象的称号。由于触发器是数据库自动执行的,因此该称号只是一个称号,没有本质的用途。触发器的称号与过程称号不一样,它有单独的命名空间,触发器可以与表名或过程名同名,但是在同一个SCHEMA中的触发器称号不能一样。2触发时间。指明触发器何时执行。BEFORE表示在数据库动作之前触发器执行。AFTER表示在数据库动作之后触发器执行。3触发事件。指明哪些数据库动作会触发此触发器:INSERT:数据库插入会触发此触发器。U

12、PDATE:数据库修正会触发此触发器。DELETE:数据库删除会触发此触发器。4表名。数据库触发器所在的表。FOR EACH ROW:对表的每一行触发器执行一次。假设没有这一选项,那么只对整个表执行一次。.1建立BEFORE 语句触发器【例】如今向数据库SCHOOL中添加一个新表DEL_TCH_PT,表的构造同表TCH_PT一样,主要存放从TCH_PT表中删除的记录。因此需求创建一个触发器,当表TCH_PT每删除一行,就把删除的记录写到日志DEL_TCH_PT中。触发器创建如下:CREATE OR REPLACE TRIGGER TCH_HIS BEFORE DELETE ON TCH_PT

13、FRO EACH ROW BEGIN INSERT INTO DEL_TCH_PT(XH,XM,XB) VALUES(:OLD.XH, :OLD.XM,:OLD.XB) END TCH_HIS;其中OLD修饰访问操作前列的值。.2运用条件谓词触发器同时包含多个事件插入、更新、删除,为了区分详细哪个事件可以运用相应的三个条件谓词:INSERTING:当触发事件为INSERT,该谓词前往TRUE,否那么为FALSE。UPDATING:当触发事件为UPDATE,该谓词前往TRUE,否那么为FALSE。DELETING:当触发事件为DELETE,该谓词前往TRUE,否那么为FALSE。.3建立AFTE

14、R 语句触发器【例】利用触发器在数据库SCHOOL 的TCH_PT 中执行插入、更新和删除3种操作后给出相应的提示。CREATE TRIGGER TISHI_TCH AFTER INSERT OR UPDATE OR DELETE ON TCH_PT FOR EACH ROWDECLARE INFOR CHAR(10);BEGIN IF INSETING THEN INFOR := 插入; ELSIF UPDATING THEN INFOR := 更新; ELSE INFOR := 删除; END IF; INSERT INTO SQL_INFOR VALUES(INFOR);END TISH

15、I_TCH;.7.4.2 行触发器行触发器是执行DML操作时,每作用一行就触发一次的触发器,主要用于审计数据变化。建立行触发器的语法如下:CREATE OR REPLACE TRIGGER trigger_name Timing event1 OR event2 OR event3 ON table_name PL/SQL blobk;其中:trigger_name是触发器称号,Timing 是触发时机,event是触发事件,table_name 指DML 操作的表名。.1建立BEFORE 行触发器【例】保证职工的月薪不低于5000元。触发器创建如下:CREATE OR REPLACE TRIGGER trigger_up_salBEFO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论