一、程序包

  程序包是一种数据库对象,它是对相关PLSQL类型、子程序、游标、异常、变量和常量的封装。程序包包含两部分内容:

  1、程序包规范:可以声明类型、变量、常量、异常、游标和子程序。

  2、程序包主题:可以实现在程序包规范中定义的游标、子程序。

二、程序包规范

  程序包规范包含一些应用程序课件的公共对象和类型的声明它是应用程序的借口。规范包含应用程序所需的资源,如果程序包规范只声明类型、常量、变量和异常,则不需要有程序包主体。只有子程序和游标才具有程序包主体。

  语法:

  create [or replace] package package_name

  is|as

    [public type and item declations]

    [subprogram specifications]

  end [package_name]

  说明:

  package_name:包的名称。

  public type and item declations:声明公共类型、常量、变量、异常和游标等。

  subprogram specifications:声明PL/SQL子程序,也就是存储过程和函数。

  在程序包规范中声明的项也可以再程序包之外使用。这样的项成为“公用对象”。

  

  例:

--程序包规范的声明
CREATE OR REPLACE PACKAGE PACKAGE_ME IS
PROCEDURE PRO_EMP_SELECT(ENO NUMBER); --声明一个存储过程:根据员工编号查询员工信息
FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER; --声明一个函数,根据员工编号查询员工工资。
END PACKAGE_ME;

三、程序包主体:

  程序包主题包含了在程序包规范中声明的每个游标和子程序的具体实现。私有声明也可以包含在程序包主体中。程序包主题部分初始化是可选的,它可用于初始化程序包包中的变量。程序包的初始化部分既不能调用程序包,也不能将参数传递给程序包,而且,初始化部分仅运行一次。

  create [or replace] package body package_name

  is|as    

    [public type and item declarations]

    [subprogram bodies]

  [begin

    initialization_statements]

  end [package_name]

  说明:

  public type and item declarations:声明变量、常量、游标、异常或类型。

  subprogram bodies:定义公共和私有PL/SQL子程序。

  initialization_statements:程序包中规范代码的实现。

  

  例:对上面所声明的规范部分的存储过程和函数提供实现。  

--创建程序包主体,提供程序包内容的实现,和存储过程、函数的声明一致
CREATE OR REPLACE PACKAGE BODY PACKAGE_ME IS
PROCEDURE PRO_EMP_SELECT(ENO NUMBER) AS
V_NAME EMP.ENAME%TYPE;
V_SAL EMP.SAL%TYPE;
BEGIN
SELECT ENAME, SAL INTO V_NAME, V_SAL FROM EMP WHERE EMPNO = ENO;
DBMS_OUTPUT.PUT_LINE('name:' || V_NAME || ' sal:' || V_SAL);
END PRO_EMP_SELECT; FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER AS
V_SAL EMP.SAL%TYPE;
BEGIN
SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = ENO;
RETURN V_SAL;
END FUN_EMP_SELECT;
END PACKAGE_ME;

四、调用程序包  

DECLARE
v_sal emp.sal%TYPE;
BEGIN
package_me.PRO_EMP_SELECT(7788); --调用方式和调用存储过程方式一样,不过需要在存储过程前添加程序包名
v_sal := package_me.FUN_EMP_SELECT(7788); --调用方式和调用函数方式一样,不过需要在函数前添加程序包名
dbms_output.put_line(v_sal);
END;

最新文章

  1. YII2之 Scenario
  2. RHEL6.7 x64双节点安装Oracle 11g r2 RAC
  3. 【总结】清除webbrowser cookie/session的6种方法
  4. 练习ajax的时候出现这个问题 还没解决
  5. 初学java注解编程 记录错误及解决办法
  6. JS 将字符串转换成日期类型
  7. Unity Editor not displaying Android textures properly
  8. KVO - 键值观察
  9. python核心编程-第五章-个人笔记
  10. A - Alignment of Code(推荐)
  11. 对于Bootstrap的介绍以及如何使用
  12. 说说 DWRUtil
  13. /debug/requests is already registered. You may have two independent copies of golang.org/x/net/trace in your binary, trying to maintain separate state. This may involve a vendored copy of golang.org/x
  14. 【leetcode】453. Minimum Moves to Equal Array Elements
  15. MySQL 事务机制
  16. centos 7.4安装教程
  17. Windows 下 Tomcat 添加为系统服务
  18. 话谈C#第二天
  19. ForwardPriceSimulationService
  20. tensorflow之曲线拟合

热门文章

  1. glance总结
  2. 由做网站操作日志想到的HttpModule应用
  3. knockout 表单绑定 要怎么Mapping才好
  4. Oracle 整理
  5. BS4爬取豆瓣电影
  6. C++ 图像处理类库
  7. 正则表达式之Regex.Matches()用法
  8. Android 轻松实现后台搭建+APP版本更新
  9. Delphi 的TSpeedButton按下和弹起效果
  10. HTML+JavaScript制作表白特效,表白不成功,小编现场吃雪