oracle数据库笔记1PL/SQL基础6包

包是存储在一起的相关对象组成的P L / S Q L结构

包有两个独立的部分,即说明部分和包体
这两部分独立地存储在数据字典中 

包的类型:
1自定义包:
2 oracle内置包

自定义包:

包的规格说明部分:
CREATE [OR REPLACE] PACKAGE <package_name> IS|AS
  <Public type and item declarations> -- 公有类型声明
  < Public Subprogram specifications> -- 公有子程序声明
END <package_name>;

程序包主体部分:
CREATE [OR REPLACE] PACKAGE BODY <package_name> IS|AS
  <Private type and item declarations> -- 私有类型声明
  < Private Subprogram bodies> -- 私有子程序体
  < Private cursor define>   -- 私有游标定义
  < putblic Subprogram bodies> -- 公有子程序体
  < putblic cursor define>   -- 公有游标定义
END <package_name>; 

一个范例的包和包体程序:

CREATE OR REPLACE PACKAGE pack_me IS
    PROCEDURE order_proc (orno varchar2);
    FUNCTION order_fun (ornos varchar2) RETURN varchar2;
END pack_me;

CREATE OR REPLACE PACKAGE BODY pack_me AS 
    /* 实现定义的存储过程 */
    PROCEDURE order_proc (orno varchar2)  IS
    stst CHAR(1);
   BEGIN
    SELECT ostatus INTO stat FROM order_master
    WHERE orderno = orno;
    IF stat = 'p' THEN
      DBMS_OUTPUT.PUT_LINE('暂挂的订单');
    ELSE
     DBMS_OUTPUT.PUT_LINE('已完成的订单');
    END IF;
   END order_proc;
    /* 实现定义的函数 */
    FUNCTION order_fun(ornos varchar2) RETURN varchar2 IS
    icode varchar2(5);
    ocode varchar2(5);
   qtyord NUMBER;
    qtydeld NUMBER;
    BEGIN
   SELECT qty_ord, qty_deld, itemcode, ordernc INTO qtyord, qtydeld, icode, ocode
    FROM order_detail
    WHERE orderno = ornos;
    IF qtyord < qtydeld THEN
      RETURN ocode;
    ELSE
      RETURN icode;
    END IF;
   END order_fun;
END pack_me;

要执行 pack_me包中的 order_proc过程,输入 EXECUTE pack_me.order_proc('o002');

要执行包中预定义的函数

DECLARE
  msg varchar2(10);
BEGIN
  msg := pack_me.order_fun('o002');
  DBMS_OUTPUT.PUT_LINE('值是 ' || msg);
END;

ORACLE内置包的作用 :
1.扩展数据库的功能
2.为 PL/SQL 提供对 SQL 功能的访问
3.用户 SYS 拥有所有程序包,可以由任何用户访问


常用的系统包:

DBMS_ALERT支持数据库事件的异步通知
DBMS_STANDARD提供语言工具
DBMS_DDL某些DDL命令的PL/SQL等效项
CALENDAR提供日历维护功能
DBMS_LOB操纵ORACLE的LOB数据
DBMS_OUTPUT在SQL*PLUS或服务管理器中提供屏幕输出
DBMS_PIPE会话间异步通信
DBMS_ROWID允许从ROWID获得信息
DBMS_SESSIONALTER SESSION的PL/SQL等效项
DBMS_SQL动态PL/SQL和SQL

  

原文地址:https://www.cnblogs.com/wust221/p/3072280.html