包 (Package) 的主要作用是用于逻辑组合相关的 PL/SQL 类型, 一旦创建了包, 包就会被存储在 Oracle 数据库中
包由以下两部分组成:
(1)包规范 (Specification): 主要是包的一些定义信息, 不包含具体的实现, 包含类型(type), 记录(record), 变量(variable), 常量(constant), 异常(exception) 定义, 游标 (cursor) 和子程序 (function or procedure) 的声明
(2)包体(Body): 包体是对包规范中声明的子程序的实现部分
包规范定义了包需要被公开的声明部分, 在创建之后将保存到数据库用户对应的 schema 中
语法 create or replace package package_name is
- -- Author : HP
- -- Created : 3/19/2018 3:49:59 PM
- -- Purpose :
- -- Public type declarations
- type <TypeName> is <Datatype>;
- -- Public constant declarations
- <ConstantName> constant <Datatype> := <Value>;
- -- Public variable declarations
- <VariableName> <Datatype>;
CURSOR cursor_name RETURN return_type; -- 定义一个游标声明
exception_nameEXCEPTION; -- 定义一个异常
- -- Public function and procedure declarations function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;
- end test_package;
包体: 包体中实现包规范的代码是公开的
不在包规范中声明的代码是私有的, 只能在本包体内被引用
- create or replace package body test_package is
- -- Private type declarations
- type <TypeName> is <Datatype>;
- -- Private constant declarations
- <ConstantName> constant <Datatype> := <Value>;
- -- Private variable declarations
- <VariableName> <Datatype>;
- -- Function and procedure implementations
- function <FunctionName>(<Parameter> <Datatype>) return <Datatype> is
- <LocalVariable> <Datatype>;
- begin
- <Statement>;
- return(<Result>);
- end;
- begin
-- Initialization 初始化代码块
- <Statement>;
- end test_package;
当包第一次被调用时, 将进行初始化, 将包从硬盘调到内存中, 放到系统全局区的共享缓冲池中, 包的运行状态则被放入用户全局区的会话存储区中
包从第一次调用被初始化, 一直到会话结束才释放其运行状态, 因此包中的变量具有会话级的作用域
当会话第一次使用某个包时, 会对包进行初始化, 此时会初始化所有包级别的数据, 对声明中的常量或变量指定赋默认值, 初始化单元中的代码块(即 begin-end 部分的语句块)
来源: http://www.bubuko.com/infodetail-2532127.html