PLSQL入门与精通(第33章:包的本质)

我们一直在列举说明PL/SQL的包的用途。但是包的本质是什么的?个人理解,PL/SQL包的本质就是“全局部”。
换句话来讲全局使用的东西,需要在包来定义。
一般来说,在无名块、或者过程和函数的本地定义部中定义的内容只能在本PL/SQL块中使用。
从这个意义上来说,这是一个本地(局部)的定义部。
所谓本地的定义部,无名块是在DECLARE和BEGIN之间进行定义的;
在过程和函数的情况下,是在IS和BEGIN之间定义的。
作为复习,简单的列出下面的例子:

<无名块>
DELCARE
本地声明部分
BEGIN
执行部
END;

<过程>
CREATE PROCEDURE 程序名称(临时参数 数据型)
IS
本地声明部分
BEGIN
执行部
END;

在本地定义部定义的内容只能在该PL/SQL块(无名块、过程、功能)中使用。

那么,想在各个PL/SQL块都可以使用的变量的话,怎么定义呢,那就是包,需要在包里边进行定义。

作为回忆,下边是包申明的格式:
<包申明部>
CREATE PACKAGE 包名
IS
各种定义(变量、常数、例外、光标、类型、过程、函数等)
END;

例如上述是包申明部的语法。一般来说,IS开始到最后整体都是申明部。仅仅是个申明,还需要实现的定义。

包的实现部和申明部一样,可以说也是一个申明部。

<包实现部>
CREATE PACKAGE BODY 包名
IS
定义变量;
过程和函数的具体实现;
END;

如上所述,包定义从IS到最后也可以说都是在定义内容。

刚才,PL/SQL的包的本质是“全局定义部”,这个指的是包的申明部分的定义内容。
而包实现部分定义的内容,其他用户不能直接使用,只能是本地内容,不叫全局定义部。

所以包定义部分的内容,本质上和包的本质是不一样的,是局部的,和普通的PLSQL块是一样是一样的。

不管怎么说,从利用包功能的用户的观点来看,包申明部申明的东西可以直接在全局上利用,
是超越了PL/SQL模块框架的共同申明部的。

例如:变量、常数、游标、类型、例外、过程、函数等,都可以在包的申明部进行申明,供全局使用。
补充一下,据我所知,只有游标变量不能存储在包里。

这就是个人对包的本质上的解释。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值