包是存储在一起的相关对象组成的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