Oracle数据库:PL/SQL的包(对象)

一、包的概述

1、包的概念:PL/SQL中将相关对象存储到一起的一种结构形式。相关 对象:变量、游标、异常、存储过程、函数。

2、包的组成:
(1)、包头(包规范):包含包相关信息的声明,不含有任何子程序代码。
(2)、包体:与包头分离,包头编译通过后才有可能编译通过,含有程序代码。

二、包头和包体

关于包头和包体,包含以下知识点:
1、包头
(1)、包含包内容的相关声明
(2)、定义内容是对外可见的

CREATE [OR REPLACE] PACKAGE package_name
	 AS|IS
				variable declare;
				cursor declare;		
				procedure declare;
				function declare;
				...
END [package_name];

2、包体
(1)、包含函数和过程的实现代码
(2)、包头成功通过编译后,才能进行编译
(3)、可以包含私有函数和过程
(4)、允许函数和过程的重载(函数和存储过程的名字是相同的,参数不同)

CREATE [OR REPLACE] PACKAGE BODY package_name
AS | IS                                      
			global variable;                       
			procedures;                            
			functions;                             
			...                                    
BEGIN                                        
			initialize statement;                  
END [package_name];                          

3、使用包
使用格式:

package_name.member_name[(arg1,...)]

三、包的使用需知

关于包的使用需知,包含以下知识点:

1、相关数据字典
(1)、USER_OBJECTS:用户拥有的全部数据库对象
(2)、USER_SOURCE:用户存储在数据库中程序和包的源代码

2、依赖关系
(1)、无效状态:函数、过程或包所依赖的对象发生了变化
(2)、有效状态:函数、过程或包所依赖的对象没有变化
(3)、包头不依赖于包体和具体数据库对象
(4)、包体依赖于包头,因此,修改了包头,包体变处于无效状态

无效依赖的具体处理方式:

情形自动重新编译
过程依赖于本地对象是,在第一次重新执行时
过程依赖于本地过程是,但是在第二次重新执行时;为了第一次重新执行成功,可以使用手动重新编译,或者第二次重新调用它
过程依赖于除过程外的远程对象

3、验证方法
如何实现远程过程的有效性检测:
1、时间戳:调用者记录的时间戳与被调用者的当前时间戳进行比较,若匹配,正常执行;若不匹配则比较签名,若签名没有发生变化,执行继续;否则,返回一个错误状态。
2、签名:包含子程序的名称,参数的数据类型、个数、模式以及函数的返回类型。若调用者记录的签名与被调用者签名不一致,需要重新编译远程过程;否则,执行继续。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值