程序包(简称包)由过程、函数、变量、常量和游标等 PL 元素组成。

    程序包具有面向对象程序设计语言的特点,是对这些 PL 程序设计元素的封装。包类似于 C++ 和 JAVA 语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法。把相关的模块归类成为包,可使开发人员利用面向对象的方法进行存储过程的开发,便于管理和理解。

    与类相同,包中的程序元素也分为公用元素和私用元素两种,这两种元素的区别是他们允许访问的程序范围不同,即它们的作用域不同。公用元素不仅可以被包中的函数、过程所调用,也可以被包外的 PL 程序访问,而私有元素只能被包内的函数和程序所访问。

    包可以管理存储子程序,主要优势如下:

    • 包可以对应用程序隐藏执行细节,对客户端程序隐藏执行细节是广泛接受的最佳实践。有不少用户严格遵守这个规范,只允许应用通过包提供的子程序接口去读写数据库。也有一些用户的做法是读数据库允许用 SELECT 查询语句,但是修改数据库必须通过包的子程序去做。因此可以将业务处理逻辑封装在包的子程序中,后期修改也非常方便。

    • 包的子程序调用必须要引用包名,这样不用担心后续数据库版本的关键字跟子程序的名字冲突导致应用代码报错。