Oracle数据库应用教程之过程、函数与程序包.pptVIP

Oracle数据库应用教程之过程、函数与程序包.ppt

  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文档。上传文档
查看更多
  3.函数的授权   与过程一样,只有创建函数的用户和管理员才有权使用函数,其他用户如果要调用函数,则需要得到该函数的EXECUTE权限。   【例7.15】 将getname函数的执行权限授予John用户。   SQLGRANT EXECUTE ON getname TO John;   4.删除函数   删除函数的命令的一般格式如下:   DROP FUNCTION [方案名.]函数名;   【例7.16】 删除函数 getname。   SQL DROP FUNCTION getname; 7.1.3 过程和函数的比较 表7-1 过程和函数的比较 7.2 程 序 包 7.2.1 程序包概述   程序包是数据库中的一个实体,包含一系列公共常量、变量、数据类型、游标、过程及函数的定义。使用包更加体现了模块化编程的优点,使得开发工作能灵活自如地进行。程序包包括两个部分:程序包规范说明部分和程序包主体部分。   1.程序包规范说明部分   该部分相当于一个包的头,类似于接口,可以对包的部件作简单说明。其中的过程、函数、变量、常量和游标都是公共的,可在应用程序中访问。   (1)?使用create package进行创建。   (2)?包含公用对象和类型。   (3)?声明类型、变量、常量、异常、游标和子程序。   (4)??可以在没有程序包主体部分的情况下存在。   2.程序包主体部分   (1)?使用create package body进行创建。   (2)?包含子程序和游标的定义。   (3)?包含私有声明。   (4)??不能在没有程序包规格说明的情况下存在。   7.2.2 创建程序包   程序包包括两部分:规范和主体。规范是程序包的公共接口;主体是规范的实现,以及私有例程、数据和变量。   1.创建程序包规范   CREATE OR REPLACE PACKAGE package_name   IS | AS   ????????公用类型或变量常量的声明;   ????????公用过程或函数的声明;   END package_name;   /   2.创建程序包主体   CREATE OR REPLACE PACKAGE BODY package_name   IS | AS   ????????私有类型或变量常量的声明;   ????????公用过程或函数的实现;   END package_name   规范是程序包的接口,规范中定义的所有内容都可以由调用者使用(当然需要具有EXECUTE特权),比如规范中定义的过程函数可以被执行,类型可以被访问,变量可以被引用。   【例7.17】 ?使用两个过程print_ename()和print_sal(),定义名为employee_pkg的程序包。   SQL CREATE OR REPLACE    2 PACKAGE employee_pkg as    3 Procedure print_ename(p_empno number);    4 Procedure print_sal(p_empno number);    5 End;    6 /   程序包已创建。   此时并没有为过程提供代码,只是定义了名称和参数。 这个时候如果试图使用这个包,则会报错。   SQL exec employee_pkg.print_ename(1234);   ERROR 位于第 1 行:   ORA-04068: 已丢弃程序包的当前状态   ORA-04067: 未执行,package body SCOTT.EMPLOYEE_PKG 不存在   ORA-06508: PL/SQL: 无法在调用之前找到程序单元   ORA-06512: 在line 1   程序包是过程函数的具体实现部分,实现规范中定义的接口。   SQL CREATE OR REPLACE    2 PACKAGE BODY employee_pkg as    3 Procedure print_ename(p_empno number) is    4 L_ename emp.ename%type;    5 Begin    6 Select ename into l_ename from emp where empno=p_empno;    7 Dbms_output.put_line(l_ename);    8 Excep

文档评论(0)

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

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

1亿VIP精品文档

相关文档