过程函数包和触发器型课件.ppt
《过程函数包和触发器型课件.ppt》由会员分享,可在线阅读,更多相关《过程函数包和触发器型课件.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、过程函数包和触发器过程函数包和触发器型型第1页,此课件共53页哦理解子程序(过程、函数)及包的概念 掌握如何创建、执行和删除过程、函数及包的方法 了解形参和实参的区别以及不同参数模式的特征灵活使用过程、函数及包书写PL/SQL程序掌握创建和测试DML触发器、instead-of数据库触发器以及系统触发器了解数据库触发器的使用时机和限制本章要点第2页,此课件共53页哦掌握存储子程序与数据字典的交互方式及如何从SQL语句中调用存储子程序了解存储子程序和局部子程序的区别掌握存储子程序在Oracle8i和Oracle9i中的新特性。本章要点第3页,此课件共53页哦子程序位置子程序和包可以存储在数据字典
2、中(子程序是用命令CREATE OR REPLACE创建)可以从其他PL/SQL语句块中调用已创建的子程序。子程序可以在语句块的声明段定义,以这种方式定义的子程序叫做局部子程序。包则必须存储在数据字典中,而不能是局部的。第4页,此课件共53页哦存储子程序和数据字典 当使用命令CREATE OR REPLACE创建子程序时,该子程序就被存储在数据字典中。存储子程序的信息可以通过各种数据字典视图来访问。第5页,此课件共53页哦局部子程序局部子程序:是一个在PL/SQL语句块的声明段中声明的子程序。子函数只在其声明的语句块中可见,其作用域从声明点开始到该语句块结束为止。其他语句块不能调用该函数,因为
3、该函数对其他语句块来说是不可见的。第6页,此课件共53页哦局部子程序(续)局部子程序也可以声明为存储子程序声明段的一部分局部子程序的位置:任何局部子程序都必须在声明段的最后进行声明预先声明:局部PL/SQL子程序的名称是标识符,必须在被引用前声明。局部子程序也可以重载第7页,此课件共53页哦存储子程序和局部子程序的比较存储子程序局部子程序该类子程序以编译后生成的伪代码形式p-code存储在数据库中。当调用该类子程序时,不需进行编译即可运行局部子程序被编译为包含它的语句块的一部分。如果其所在语句块是匿名块并需要多次运行时,则该子程序就必须每次进行编译存储子程序可以从对该子程序具有EXECUTE特
4、权的用户所提交的任何语句块中调用局部子程序只能从包含子程序的语句块中调用由于存储子程序与调用块的相互隔离,调用块具有代码少,易于理解的特点。除此之外,子程序和调用块还可以分开维护局部子程序和调用块同处于一个块内,所以容易引起混淆。如果修改了调用块的话,则该块调用的子程序作为所属块的一部分也要重新编译可以使用DBMS_SHARED_POOL.KEEP包过程来把编译后p-code代码存储在共享池中。这种方式可以改善程序性能局部子程序自身不能存储在共享池中独立的存储子程序不能进行重载,但同一包内的子程序可以重载同一块中的局部子程序可以重载第8页,此课件共53页哦子程序的依赖性 依赖:数据字典记录了存
5、储过程或函数所引用的所有Oracle对象。该过程或函数就依赖于这些存储的对象。自动重编译:如果一个依赖对象失效,PL/SQL引擎将在该对象再次被调用时对其重新进行编译。包的依赖性:包体的变化不会导致修改包头。因此,其他依赖于该包头的对象也不需要进行重新编译。如果该包头有变化,则会使包体自动失效,这是因为该包体依赖于包头。如何确定无效:通过数据字典在不断地跟踪对象间依赖性第9页,此课件共53页哦包运行时状态当第一次实例化一个包时,将从磁盘中读入该包的伪代码并将其放入系统全局工作区SGA的共享池中。包的运行时状态,即打包的变量和游标,则存放在用户全局区(UGA)的会话存储区中。这就保证了每个会话都
6、将有其运行时状态的副本。第10页,此课件共53页哦EXECUTE特权 为了能够对表进行访问,必须使用SELECT,INSERT,UPDATE和DELETE对象特权。GRANT语句把这些特权赋予数据库用户或角色。对于存储子程序和包来说,相关的特权是EXECUTE。第11页,此课件共53页哦默认参数从过程化语句中调用一个函数时,如果该函数有形参的话,可以使用其缺省值。然而,如果从SQL语句调用函数时,必须指定所有参数。必须使用位置对应法(Positinal Notation),而不能使用名称对应法(Name Notation)。第12页,此课件共53页哦Oracle8i中从SQL语句调用函数从Or
7、acle8i起,从DML语句中调用的函数既不可以从正在被该DML语句修改的数据库表读取数据,也不能对其进行修改,但该函数可以更新其他表。第13页,此课件共53页哦小结1.通过访问各种数据库字典视图来查询子程序的信息。user_objects视图包含了当前用户拥有的所有对象的信息。user_source视图包含对象的源程序代码。user_errors视图则包含编译错误的信息。2.预先声明可以解决函数之间相互调用的问题。3.子程序引用其他数据库对象时,该子程序依赖于那个对象。如果修改了被引用对象,那么依赖对象的状态将更改为无效,指出需要重新编译。第14页,此课件共53页哦 本章要点理解数据库触发器
8、、变异表和约束表的概念及数据库触理解数据库触发器、变异表和约束表的概念及数据库触发器的语法发器的语法掌握如何在掌握如何在SQL*PLUSSQL*PLUS中创建和测试中创建和测试DMLDML触发器、触发器、instead-ofinstead-of数据库触发器以及系统触发器数据库触发器以及系统触发器了解数据库触发器的使用时机和限制。了解数据库触发器的使用时机和限制。第15页,此课件共53页哦触发器的概念作为数据库对象的触发器是一个与表相关联的被存储的PL/SQL程序。每当一个特定的数据操作语句在指定的表上发生时,就会引发触发器的执行。与存储子程序的调用方式不同,触发器的执行是采用触发机制第16页,
9、此课件共53页哦触发器的定义和使用触发器是当特定事件出现时自动执行的存储过程特定事件可以是执行更新的DML语句和DDL语句触发器不能被显式调用触发器的功能:自动生成数据自定义复杂的安全权限提供审计和日志记录启用复杂的业务逻辑第17页,此课件共53页哦触发器的类型 触发器主要有三种类型:DMLINSTEAD-OF触发器系统触发器。触发器的应用,主要用于:维护那些通过创建表时的声明约束无法实现的复杂的完整性约束。通过记录已进行的改变以及是谁进行了该项改变来检查一个表中的信息。当一个表发生改变时,自动向其他程序发送需要采取行动的信号。在一个发布-预订环境中发布有关各种事件的信息。第18页,此课件共5
10、3页哦DML触发器 DML触发器可以由DML语句激发由DML语句的类型决定DML触发器的类型。DML触发器可以在DML语句操作之前或之后激发。DML触发器也可以在行或语句操作上激发。第19页,此课件共53页哦INSTEAD-OF触发器 INSTEAD-OF 触发器是行级别的,执行时,激发它的DML语句不执行。只能定义在视图上(可以是关系型或是对象)。Oracle8及更高版本才提供。第20页,此课件共53页哦系统触发器 系统触发器在发生诸如数据库启动或关闭等系统事件时激发,而不是在执行DML语句时激发。系统触发器也可以在DDL操作时,如表的创建时被激发。第21页,此课件共53页哦创建触发器 CR
11、EATE OR REPLACE TRIGGER trigger_nameBEFORE|AFTER|INSTEAD OF triggering_eventreferencing_clauseWHEN trigger_conditionFOR EACH ROWtrigger_body;第22页,此课件共53页哦Create trigger emp_t Before insert or update or delete On empBegin If to_char(sysdate,dy)=星期日星期日 thenRaise_application_error(-20000,today is holid
12、ay!);End if;-抛出一个异常,但不做异常处理。抛出一个异常,但不做异常处理。抛出一个异常,但不做异常处理。抛出一个异常,但不做异常处理。End;当执行一条删除语句在星期六对当执行一条删除语句在星期六对emp表进行删除操作时:表进行删除操作时:Delete from emp where eno=eo1;那么将会删除成功,那么将会删除成功,如果是在星期日执行这条语句,则触发器的异常导致本应继续执行如果是在星期日执行这条语句,则触发器的异常导致本应继续执行的触发语句不再执行,删除未成功。的触发语句不再执行,删除未成功。创建触发器 第23页,此课件共53页哦AFTER 子句AFTER:表示触
13、发语句正常执行后,触发器被触发。注意:虽然触发器是在触发语句之后触发,但是如果触发器代码出现异常时,在此之前执行的触发语句无效。第24页,此课件共53页哦Create or replace trigger emp_testAfter delete On empBegin Raise_application_error(-20000,test message!);End;当执行一条语句对emp表中的数据进行删除时,Delete from emp where empno=7369;该语句执行完后,触发器被触发,但触发器抛出一个异常,所以已执行的删除语句无效,实际上并没有删除7369职工记录。AFT
14、ER 子句第25页,此课件共53页哦触发语句和触发器的相互影响系统是将触发语句和触发器的执行作为一个整体来看待的。无论是BEFORE还是AFTER触发器,触发器有异常,触发语句都会撤消;而触发语句出现异常,触发器的工作也会撤消。例:Create or replace trigger emp_t1Before insert or update or delete On empBegin Insert into temp values(insert emp!);End;/第26页,此课件共53页哦当执行一条插入语句时:Insert into emp(empno)values(7369);如果发生主
15、码重复,插入语句错误时查看temp表为空,触发器所做的工作被撤消。如果插入合法的话,再查看temp表,则有一行“insert emp!”触发语句和触发器的相互影响第27页,此课件共53页哦INSTEAD OF 子句INSTEAD OF:表示不执行触发语句,而是执行触发器代码。相当于用触发器代码替代了触发语句所做的工作。注意:该子句仅用于建立视图上的触发器,而且默认为行触发器。例:编写一个触发器emp_view_t,其功能是禁止对emp_view 视图进行所有的操作,并输出有关提示信息。第28页,此课件共53页哦假设视图定义如下:Create view emp_view asSelect*fro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 过程 函数 触发器 课件
限制150内