14(下)-过程函数包和触发器型.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库开发技术 第14章(下) 使用子程序和包 本章要点 理解子程序(过程、函数)及包的概念 掌握如何创建、执行和删除过程、函数及包的方法 了解形参和实参的区别以及不同参数模式的特征 灵活使用过程、函数及包书写PL/SQL程序 掌握创建和测试DML触发器、instead-of数据库触发器以及系统触发器 了解数据库触发器的使用时机和限制 本章子要点 掌握存储子程序与数据字典的交互方式及如何从SQL语句中调用存储子程序 了解存储子程序和局部子程序的区别 掌握存储子程序在Oracle8i和Oracle9i中的新特性。 子程序位置 子程序和包可以存储在数据字典中(子程序是用命令CREATE OR REPLACE创建) 可以从其他PL/SQL语句块中调用已创建的子程序。 子程序可以在语句块的声明段定义,以这种方式定义的子程序叫做局部子程序。 包则必须存储在数据字典中,而不能是局部的。 存储子程序和数据字典 当使用命令CREATE OR REPLACE创建子程序时,该子程序就被存储在数据字典中。 子程序的信息可以通过各种数据字典视图来访问。 局部子程序 局部子程序: 是一个在PL/SQL语句块的声明段中声明的子程序。 子函数只在其声明的语句块中可见,其作用域从声明点开始到该语句块结束为止。其他语句块不能调用该函数,因为该函数对其他语句块来说是不可见的。 局部子程序(续) 局部子程序也可以声明为存储子程序声明段的一部分 局部子程序的位置:任何局部子程序都必须在声明段的最后进行声明 预先声明 :局部PL/SQL子程序的名称是标识符,必须在被引用前声明。 局部子程序也可以重载 存储子程序和局部子程序的比较 存储子程序和包的注意事项 优势: 可以由多个数据库用户共享 隐含影响: 存储子程序间的依赖性 包状态的处理方法 运行存储子程序 包所需要的特权 子程序的依赖性 依赖:数据字典记录了存储过程或函数所引用的所有Oracle对象。该过程或函数就依赖于这些存储的对象。 自动重编译:如果一个依赖对象失效,PL/SQL引擎将在该对象再次被调用时对其重新进行编译。 包的依赖性:包体的变化不会导致修改包头。因此,其他依赖于该包头的对象也不需要进行重新编译。如果该包头有变化,则会使包体自动失效,这是因为该包体依赖于包头 。 如何确定无效 :通过数据字典在不断地跟踪对象间依赖性 包运行时状态 当第一次实例化一个包时,将从磁盘中读入该包的伪代码并将其放入系统全局工作区SGA的共享池中。 包的运行时状态,即打包的变量和游标,则存放在用户全局区(UGA)的会话存储区中。这就保证了每个会话都将有其运行时状态的副本。 可串行复用包和非串行复用包:PL/SQL 2.3版及更高版本允许程序员对包做可串行复用标志。 包运行时状态 特权和存储子程序 存储子程序和包都是数据库字典中的对象,因而,它们属于特殊的数据库用户或模式。如果用户被授予了正确的特权,则它们就可以访问这些对象。 当创建一个存储对象时,考虑到子程序内部的访问可用性,特权和角色也开始起作用。 EXECUTE特权 为了能够对表进行访问,必须使用SELECT,INSERT,UPDATE和DELETE对象特权。GRANT语句把这些特权赋予数据库用户或角色。对于存储子程序和包来说,相关的特权是EXECUTE。 存储子程序和角色 子程序使用显式地(而不是通过角色)授权其所有者的特权而执行。 为了使通过角色授权的特权作用在存储子程序和触发器内被使用,每次运行过程时,必须对该特权进行检查。 调用者的权限与定义者的权限 Oracle8i提供了不同的外部引用解决方案。在调用者的权限子程序中,外部引用是通过调用者而不是所有者的特权设置而执行的。调用者的权限程序是通过使用AUTHID子句而创建,该语句只适用于独立子程序、包说明和对象类型说明。 在包内部或对象类型中的独立子程序必须都是调用者子程序或都是定义者子程序,而不能混合。 AUTHID的语法如下: CREATE [OR REPLACE] FUNCTION function_name [parameter_list] RETURN return_type [AUTHID {CURRENT_USER | DEFINER}] {IS | AS} function_body; CREATE [OR REPLACE] PROCEDURE procedure_name [parameter_list] [AUTHID {CURRENT_USER | DEFINER}] {IS | AS} function_body; CREATE [OR REPLACE] PACKAGE package_spec_name [AU

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档