1、包(Package)概述
包(Package)是用来存储相关程序结构的对象,它存储于数据字典中。包由两部分组成:包规范(PACKAGE)和包体(PACKAGE BODY)。
包规范是包的说明部分,是对外的操作接口(类似java接口),对应用是可见的。
包体是包的代码和实现部分(类似java实现类),对应用来说是不可见的。
1.1 包说明
公有元素(PUBLIC) 在包头中说明,在包体中具体定义。在包外可见并可以访问,对整个应用的全过程有效。
私有元素(PRIVATE) 在包体的说明部分说明。只能被包内部的其他部分访问。
局部变量(LOCAL) 在过程或函数的说明部分说明。只能在定义变量的过程或函数中使用。
1.2 系统包
包名称 | 描述 |
---|---|
DBMS_OUTPUT | 在SQL*Plus环境下输出信息 |
DBMS_DDL | 编译过程函数和包 |
DBMS_SESSION | 改变用户的会话,初始化包等 |
DBMS_TRANSACTION | 控制数据库事务 |
DBMS_MAIL | 连接Oracle*Mail |
DBMS_LOCK | 进行复杂的锁机制管理 |
DBMS_ALERT | 识别数据库事件告警 |
DBMS_PIPE | 通过管道在会话间传递信息 |
DBMS_JOB | 管理Oracle的作业 |
DBMS_LOB | 操纵大对象 |
DBMS_SQL | 执行动态SQL语句 |
2、基本语法
2.1 创建包和包体
1.创建包规范语法:
CREATE [OR REPLACE] PACKAGE 包名 IS|AS
--变量(VARIABLE)定义
--常量(CONSTANT)定义
--游标(CURSOR)定义
--类型(TYPE)定义
--函数定义
FUNCTION 函数名 [(参数列表)] RETURN 返回类型;
--存储过程定义
PROCEDURE 存储过程名 [(参数列表)];
异常(EXCEPTION)
END [包名];
2.创建包体语法:
CREATE [OR REPLACE] PACKAGE BODY 包名 IS|AS
--...
--函数实现
FUNCTION 函数名 [(参数列表)] RETURN 返回类型 IS|AS
--函数实现内容
--存储过程实现
PROCEDURE 存储过程名 [(参数列表)] IS|AS
--存储过程实现内容
END [包名];
2.2 其它语法
--1 删除包规范
DROP PACKAGE 包规范名
--2 删除包体
DROP PACKAGE BODY 包体名
--3 重新编译包头
ALTER PACKAGE 包名 COMPILE PACKAGE
--4 重新编译包体
ALTER PACKAGE 包名 COMPILE PACKAGE BODY
2.3 注意要点
1 包说明和包体必须有相同的名字
2 包的开始没有BEGIN语句,与存储过程和函数不同。
3 在包的说明部分定义函数和过程的名称和参数,具体实现在包体中定义。
4 在包内声明常量、变量、类型定义、异常、及游标时不使用DECLARE。
5 包内的过程和函数的定义不要CREATE OR REPLACE语句。
6 包定义和包体两者分离。
7 只有当包头编辑成功后才能编辑包体。
8 函数名与过程名须和包头中的函数过程一样。