包是一组相关过程、函数、变量、常量和游标等pl/sql程序设计元素的组合。
与类一样,包中的程序元素分为公用元素和私用元素。公用元素可以被包中的函数、过程调用,也可以被包外的pl/sql程序访问;而私有元素只能被包内的函数和过程访问。
在pl/sql程序设计中,使用包可以提高程序的执行效率。因为程序首次调用包内函数或过程时,oracle需要将整个包调入内存;当再次访问包内元素时,oracle直接从内存中读取,而不需要进行磁盘i/o操作,从而提高程序的执行效率。
1. 一个包由两个分开的部分组成:
1>包定义:包定义部分声明了包内数据类型、变量、常量、游标、子程序和异常错误处理等,这些元素为包的公有元素。
2>包主体:包主体是包定义部分的具体实现,它实现了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。
包定义和包主体分开编译,并作为两部分分开的对象存放在数据库字典中。
2. 包的定义
create or replace package demo_pakage is
--公有数据类型定义
--公有游标声明
--公有变量声明
--公有子程序声明
end demo_pakage;
create or replace package demo_package is --公有变量 v_consump t_consumption%rowtype; --子程序函数 function getallsalary(cstmId number) return number; --子程序存储过程 procedure sp_checkaccount(account in char,errNo out integer); end demo_package;
3.子程序重载
pl/sql允许对包内子程序和本地子程序进行重载。所谓重载是指两个或多个子程序具有相同的名称,但拥有不同的参数变量、参数顺序或参数数据类型。