过程函数包和触发器精选PPT.ppt
《过程函数包和触发器精选PPT.ppt》由会员分享,可在线阅读,更多相关《过程函数包和触发器精选PPT.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、过程函数包和触发器第1页,此课件共85页哦理解子程序(过程、函数)及包的概念理解子程序(过程、函数)及包的概念 掌握掌握如何创建、执行和删除过程如何创建、执行和删除过程、函数及包的方法、函数及包的方法 了解形参和实参的区别以及不同参数模式的特征了解形参和实参的区别以及不同参数模式的特征灵活使用过程、函数及包书写灵活使用过程、函数及包书写PL/SQLPL/SQL程序程序掌握创建和测试掌握创建和测试DMLDML触发器、触发器、instead-ofinstead-of数据库触数据库触发器以及系统触发器发器以及系统触发器了解数据库触发器的使用时机和限制了解数据库触发器的使用时机和限制本章要点本章要点第
2、2页,此课件共85页哦掌握存储子程序与数据字典的交互方式及如何从掌握存储子程序与数据字典的交互方式及如何从SQLSQL语句中调用存储子程序语句中调用存储子程序了解存储子程序和局部子程序的区别了解存储子程序和局部子程序的区别掌握存储子程序的特性。掌握存储子程序的特性。本章子要点本章子要点第3页,此课件共85页哦子程序位置子程序位置l子程序和包可以存储在数据字典中(子程序是用子程序和包可以存储在数据字典中(子程序是用命令命令CREATE OR REPLACE创建)创建)l可以从其他可以从其他PL/SQL语句块中调用已创建的子程序。语句块中调用已创建的子程序。l子程序可以在语句块的声明段定义,以这种
3、方式子程序可以在语句块的声明段定义,以这种方式定义的子程序叫做定义的子程序叫做局部子程序局部子程序。l包则必须存储在数据字典中,而不能是局部的。包则必须存储在数据字典中,而不能是局部的。第4页,此课件共85页哦存储子程序和数据字典存储子程序和数据字典 l当使用命令当使用命令CREATE OR REPLACE创建创建子程序时,该子程序就被存储在数据字子程序时,该子程序就被存储在数据字典中。典中。l子程序的信息可以通过各种数据字典视子程序的信息可以通过各种数据字典视图来访问。图来访问。第5页,此课件共85页哦局部子程序局部子程序l局部子程序局部子程序:是一个在是一个在PL/SQL语句块的声语句块的
4、声明段中声明的子程序。明段中声明的子程序。l子函数子函数只在其声明的语句块中可见,其作只在其声明的语句块中可见,其作用域从声明点开始到该语句块结束为止。用域从声明点开始到该语句块结束为止。其他语句块不能调用该函数,因为该函数其他语句块不能调用该函数,因为该函数对其他语句块来说是不可见的。对其他语句块来说是不可见的。第6页,此课件共85页哦局部子程序(续)局部子程序(续)l局部子程序也可以声明为存储子程序声明局部子程序也可以声明为存储子程序声明段的一部分段的一部分l局部子程序的位置:任何局部子程序都必局部子程序的位置:任何局部子程序都必须在声明段的最后进行声明须在声明段的最后进行声明l预先声明预
5、先声明:局部:局部PL/SQL子程序的名称是子程序的名称是标识符,必须在被引用前声明。标识符,必须在被引用前声明。l局部子程序也可以重载局部子程序也可以重载第7页,此课件共85页哦存储子程序和局部子程序的比较存储子程序和局部子程序的比较存储子程序局部子程序该类子程序以编译后生成的伪代码形式p-code存储在数据库中。当调用该类子程序时,不需进行编译即可运行局部子程序被编译为包含它的语句块的一部分。如果其所在语句块是匿名块并需要多次运行时,则该子程序就必须每次进行编译存储子程序可以从对该子程序具有EXECUTE特权的用户所提交的任何语句块中调用局部子程序只能从包含子程序的语句块中调用由于存储子程
6、序与调用块的相互隔离,调用块具有代码少,易于理解的特点。除此之外,子程序和调用块还可以分开维护局部子程序和调用块同处于一个块内,所以容易引起混淆。如果修改了调用块的话,则该块调用的子程序作为所属块的一部分也要重新编译可以使用DBMS_SHARED_POOL.KEEP包过程来把编译后p-code代码存储在共享池中。这种方式可以改善程序性能局部子程序自身不能存储在共享池中独立的存储子程序不能进行重载,但同一包内的子程序可以重载同一块中的局部子程序可以重载第8页,此课件共85页哦存储子程序和包的注意事项存储子程序和包的注意事项优势:优势:l可以由多个数据库用户共享可以由多个数据库用户共享隐含影响:隐
7、含影响:l存储子程序间的依赖性存储子程序间的依赖性l包状态的处理方法包状态的处理方法l运行存储子程序运行存储子程序l包所需要的特权包所需要的特权第9页,此课件共85页哦子程序的依赖性子程序的依赖性 l依赖:数据字典记录了存储过程或函数所引用的所依赖:数据字典记录了存储过程或函数所引用的所有有Oracle对象。该过程或函数就依赖于这些存储的对象。对象。该过程或函数就依赖于这些存储的对象。l自动重编译自动重编译:如果一个依赖对象失效,如果一个依赖对象失效,PL/SQL引擎将在引擎将在该对象再次被调用时对其重新进行编译。该对象再次被调用时对其重新进行编译。l包的依赖性:包体的变化不会导致修改包头。因
8、此,其他包的依赖性:包体的变化不会导致修改包头。因此,其他依赖于该包头的对象也不需要进行重新编译。如果该包头依赖于该包头的对象也不需要进行重新编译。如果该包头有变化,则会使包体自动失效,这是因为该有变化,则会使包体自动失效,这是因为该包体依赖于包体依赖于包头包头。l如何确定无效如何确定无效:通过数据字典在不断地跟踪对象间依赖性通过数据字典在不断地跟踪对象间依赖性第10页,此课件共85页哦包运行时状态包运行时状态l当第一次实例化一个包时,将从磁盘中读入该包的伪当第一次实例化一个包时,将从磁盘中读入该包的伪代码并将其放入系统全局工作区代码并将其放入系统全局工作区SGA的共享池中。的共享池中。l包的
9、运行时状态,即打包的变量和游标,则存放在用包的运行时状态,即打包的变量和游标,则存放在用户全局区(户全局区(UGA)的会话存储区中。这就保证了每个会)的会话存储区中。这就保证了每个会话都将有其运行时状态的副本。话都将有其运行时状态的副本。l可串行复用包和非串行复用包:可串行复用包和非串行复用包:PL/SQL 2.3版及更高版版及更高版本允许程序员对包做可串行复用标志。本允许程序员对包做可串行复用标志。第11页,此课件共85页哦包运行时状态包运行时状态可串行复用包非串行复用包运行时状态保存在SGA中,每次数据库调用后都将该运行时状态释放运行时状态保存在UGA中,其生存期与数据库会话相同所用的最大
10、内存与同时使用该包的用户数成正比所用的最大内存与当前登录的用户数成正比第12页,此课件共85页哦特权和存储子程序特权和存储子程序 l存储子程序和包都是数据库字典中的对存储子程序和包都是数据库字典中的对象,因而,它们属于特殊的数据库用户象,因而,它们属于特殊的数据库用户或模式。如果用户被授予了正确的特权,或模式。如果用户被授予了正确的特权,则它们就可以访问这些对象。则它们就可以访问这些对象。l当创建一个存储对象时,考虑到子程序当创建一个存储对象时,考虑到子程序内部的访问可用性,特权和角色也开始内部的访问可用性,特权和角色也开始起作用。起作用。第13页,此课件共85页哦EXECUTE特权特权 l为
11、了能够对表进行访问,必须使用为了能够对表进行访问,必须使用SELECT,INSERT,UPDATE和和DELETE对象特权。对象特权。GRANT语句把这些语句把这些特权赋予数据库用户或角色。对于存储特权赋予数据库用户或角色。对于存储子程序和包来说,相关的特权是子程序和包来说,相关的特权是EXECUTE。第14页,此课件共85页哦第15页,此课件共85页哦第16页,此课件共85页哦存储子程序和角色存储子程序和角色 l子程序使用显式地(而不是通过角色)子程序使用显式地(而不是通过角色)授权其所有者的特权而执行。授权其所有者的特权而执行。l为了使通过角色授权的特权作用在存储为了使通过角色授权的特权作
12、用在存储子程序和触发器内被使用,每次运行过子程序和触发器内被使用,每次运行过程时,必须对该特权进行检查。程时,必须对该特权进行检查。第17页,此课件共85页哦调用者的权限与定义者的权限调用者的权限与定义者的权限 lOracle提供了不同的外部引用解决方案。在调用者提供了不同的外部引用解决方案。在调用者的权限子程序中,外部引用是通过调用者而不是所的权限子程序中,外部引用是通过调用者而不是所有者的特权设置而执行的。调用者的权限程序是通有者的特权设置而执行的。调用者的权限程序是通过使用过使用AUTHID子句而创建,该语句只适用于独立子子句而创建,该语句只适用于独立子程序、包说明和对象类型说明。程序、
13、包说明和对象类型说明。l在包内部或对象类型中的独立子程序必须都是调用在包内部或对象类型中的独立子程序必须都是调用者子程序或都是定义者子程序,而不能混合。者子程序或都是定义者子程序,而不能混合。第18页,此课件共85页哦AUTHIDAUTHID的语法如下:的语法如下:的语法如下:的语法如下:CREATE OR REPLACE FUNCTION function_name parameter_list RETURN return_type AUTHID CURRENT_USER|DEFINER IS|AS function_body;CREATE OR REPLACE PROCEDURE proc
14、edure_name parameter_list AUTHID CURRENT_USER|DEFINER IS|AS function_body;CREATE OR REPLACE PACKAGE package_spec_name AUTHID CURRENT_USER|DEFINER IS|AS package_spec;CREATE OR REPLACE TYPE type_name AUTHID CURRENT_USER|DEFINER IS|AS OBJECT type_spec;第19页,此课件共85页哦默认参数默认参数l从过程化语句中调用一个函数时,如果该函从过程化语句中调用一
15、个函数时,如果该函数有形参的话,可以使用其缺省值。然而,数有形参的话,可以使用其缺省值。然而,如果从如果从SQL语句调用函数时,必须指定所有语句调用函数时,必须指定所有参数。参数。l必须使用位置对应法(必须使用位置对应法(Positinal Notation),而不能使用名称对应法(而不能使用名称对应法(Name Notation)。)。第20页,此课件共85页哦从从Oracle中从中从SQL语句调用函数语句调用函数l从从Oracle起,从起,从DML语句中调用的函数语句中调用的函数既不可以从正在被该既不可以从正在被该DML语句修改的数语句修改的数据库表读取数据,也不能对其进行修改,据库表读取
16、数据,也不能对其进行修改,但该函数可以更新其他表。但该函数可以更新其他表。第21页,此课件共85页哦包的辅助功能包的辅助功能 l共享池锁定共享池锁定l包体长度的限制包体长度的限制 l优化参数优化参数第22页,此课件共85页哦共享池锁定共享池锁定 lDBMS_SHARED_POOL包允许程序员把一个对包允许程序员把一个对象锁定在共享池中。象锁定在共享池中。l当该对象被锁定后,除非由程序申请对其清除,当该对象被锁定后,除非由程序申请对其清除,否则无论共享池有多满,也不管是否有程序访问否则无论共享池有多满,也不管是否有程序访问该对象,该对象将常驻在共享池中。该对象,该对象将常驻在共享池中。l这种处理
17、方法有利于提高程序的运行效率,因为从系这种处理方法有利于提高程序的运行效率,因为从系统的磁盘重新装入对象要进行大量读写操作。锁定对统的磁盘重新装入对象要进行大量读写操作。锁定对象还有助于最大限度地减少共享池的碎片。象还有助于最大限度地减少共享池的碎片。第23页,此课件共85页哦包体长度的限制包体长度的限制 l编译器对包体长度的限制如下编译器对包体长度的限制如下:lDiana树中的节点数。在树中的节点数。在Oracle8i之前的版本中,之前的版本中,Diana节点节点的最大数目是的最大数目是32K,Oracle8i以上版本将包体和类型体的限以上版本将包体和类型体的限制扩充到了制扩充到了64兆字节
18、的容量。兆字节的容量。l编译器生成的临时中间变量的容量最多编译器生成的临时中间变量的容量最多21K字节。字节。l入口点的数量。一个包体最多可以有入口点的数量。一个包体最多可以有32K个入口点,入口点个入口点,入口点可以是过程或函数。可以是过程或函数。l字符串的数量。字符串的数量。PL/SQL对字符串的限制单位是对字符串的限制单位是232。第24页,此课件共85页哦优化参数优化参数 l使用使用DETERMINISTIC和和PARALLEL_ENABLE关键字,关键字,PL/SQL编译优化器将会对调用编译优化器将会对调用PL/SQL函数进行优化。函数进行优化。l该关键字要放在函数的返回类型和该关键
19、字要放在函数的返回类型和IS或或AS子句之间子句之间。CREATE OR REPLACE FUNCTION function_nameCREATE OR REPLACE FUNCTION function_name parameter_list parameter_listRETURN return_typeRETURN return_typeDETERMINISTICDETERMINISTICPARALLEL_ENABLEPARALLEL_ENABLEIS|ASIS|ASfunction_body;function_body;第25页,此课件共85页哦小结小结1.通过访问各种数据库字典视图来
20、查询子程序的信息。通过访问各种数据库字典视图来查询子程序的信息。user_objects视图包含了当前用户拥有的所有对象的信息。视图包含了当前用户拥有的所有对象的信息。user_source视图包含对视图包含对象的源程序代码。象的源程序代码。user_errors视图则包含编译错误的信息。视图则包含编译错误的信息。2.预先声明可以解决函数之间相互调用的问题。预先声明可以解决函数之间相互调用的问题。3.子程序引用其他数据库对象时,该子程序依赖于那个对象。如果修子程序引用其他数据库对象时,该子程序依赖于那个对象。如果修改了被引用对象,那么依赖对象的状态将更改为无效,指出需要重改了被引用对象,那么依
21、赖对象的状态将更改为无效,指出需要重新编译。新编译。4.在在PL/SQL中使用的函数可以使用额外的限制,这被称为纯度等级。中使用的函数可以使用额外的限制,这被称为纯度等级。5.共享池是在子程序运行时包含已编译子程序伪代码及其他代码的共享池是在子程序运行时包含已编译子程序伪代码及其他代码的SGA的一部分。的一部分。KEEP过程用来在共享池中锁定对象。过程用来在共享池中锁定对象。UNKEEP过过程实现从共享池中删除锁定对象。程实现从共享池中删除锁定对象。SIZES过程用来把共享池的内容过程用来把共享池的内容输出到屏幕。输出到屏幕。6.PL/SQL编译优化器使用编译优化器使用DETERMINISTI
22、C和和PARALLEL_ENABLE关键字对调用关键字对调用PL/SQL函数进行优化。函数进行优化。第26页,此课件共85页哦 数据库开发技术数据库开发技术第第14章(下)章(下)数据库触发器数据库触发器福建工程学院福建工程学院第27页,此课件共85页哦 本章要点本章要点l理解数据库触发器、变异表和约束表的概念及数据库触发器的语法l掌握如何在SQL*PLUS中创建和测试DML触发器、instead-of数据库触发器以及系统触发器l了解数据库触发器的使用时机和限制。第28页,此课件共85页哦触发器的概念触发器的概念作为数据库对象的触发器是一个与表相关作为数据库对象的触发器是一个与表相关联的被存储
23、的联的被存储的PL/SQL程序。每当一个特定程序。每当一个特定的数据操作语句在指定的表上发生时,就的数据操作语句在指定的表上发生时,就会引发触发器的执行。会引发触发器的执行。与存储子程序的调用方式不同,触发与存储子程序的调用方式不同,触发器的执行是采用触发机制器的执行是采用触发机制第29页,此课件共85页哦触发器的定义和使用触发器的定义和使用触发器是当特定事件出现时自动执行的存储过程触发器是当特定事件出现时自动执行的存储过程特定事件可以是执行更新的特定事件可以是执行更新的DML语句和语句和DDL语句语句触发器不能被显式调用触发器不能被显式调用触发器的功能:触发器的功能:自动生成数据自动生成数据
24、自定义复杂的安全权限自定义复杂的安全权限提供审计和日志记录提供审计和日志记录启用复杂的业务逻辑启用复杂的业务逻辑第30页,此课件共85页哦触发器的类型触发器的类型 触发器主要有三种类型:触发器主要有三种类型:lDMLlINSTEAD-OF触发器触发器l系统触发器。系统触发器。触发器的应用,触发器的应用,主要用于:主要用于:l维护那些通过创建表时的声明约束无法实现的复杂的完整性约束。维护那些通过创建表时的声明约束无法实现的复杂的完整性约束。l通过记录已进行的改变以及是谁进行了该项改变来检查一个表中的信通过记录已进行的改变以及是谁进行了该项改变来检查一个表中的信息。息。l当一个表发生改变时,自动向
25、其他程序发送需要采取行动的信号。当一个表发生改变时,自动向其他程序发送需要采取行动的信号。l在一个发布在一个发布-预订环境中发布有关各种事件的信息。预订环境中发布有关各种事件的信息。第31页,此课件共85页哦DML触发器触发器 lDML触发器可以由触发器可以由DML语句激发语句激发l由由DML语句的类型决定语句的类型决定DML触发器的类触发器的类型。型。lDML触发器可以在触发器可以在DML语句操作之前或语句操作之前或之后激发。之后激发。lDML触发器也可以在行或语句操作上激触发器也可以在行或语句操作上激发发。第32页,此课件共85页哦INSTEAD-OF触发器触发器 lINSTEAD-OF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 过程 函数 触发器 精选 PPT
限制150内