Oracle数据库包的使用
时间:2010-08-14 来源:52yingtai
PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包的构造。
(1)包是一种数据库对象,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位,是一组相关过程、函数、变量、常量和游标等PL/SQL程序设计元素的组合,它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装。
(2)包类似于C++和JAVA语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法。把相关的模块归类成为包,可使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统性能。
(3)与类相同,包中的程序元素也分为公用元素和私用元素两种,这两种元素的区别是他们允许访问的程序范围不同,即它们的作用域不同。公用元素不仅可以被包中的函数、过程所调用,也可以被包外的PL/SQL程序访问,而私有元素只能被包内的函数和过程序所访问。
(4)PL/SQL的包具有信息隐蔽性(information hiding),仅在算法和数据结构设计有关层可见。可将过程说明和过程体组成一个程序单位。也可将过程说明与它的过程体分开,在这种情况下,将过程放置在一个包中,可隐蔽实现的细节。也可在包中定义过程,而该过程在包说明中没有定义过程说明,这样定义的过程仅在包内使用。
(5)在PL/SQL程序设计中,使用包不仅可以使程序设计模块化,对外隐藏包内所使用的信息(通过使用私用变量),而写可以提高程序的执行效率。因为,当程序首次调用包内函数或过程时,ORACLE将整个包调入内存,当再次访问包内元素时,ORACLE直接从内存中读取,而不需要进行磁盘I/O操作,从而使程序执行效率得到提高。如果ORACLE具有Procedure选件,包可以编译、存贮在ORACLE数据库中,其内容可为许多应用共享。 也就是说,包与过程和函数的一个明显区别是,包仅能存储在非本地的数据库中。除了允许相关的对象组和为组之外,包与依赖性较强的存储子程序相比其所受的限制较少。除此之外,包的效率比较高。 从本质上来说,包是一个命名的声明部分。任何可以出现的块中的语句都可以在包中使用。包括过程、函数、游标、类型和变量。这些内容放到包中的好处是,用户可以从其它的PL/SQL块中对其进行引用,包为PL/SQL提供了全程变量。 包的定义分为包头和包体定义。我用一个例子来说明: 包头:
create or replace package TestPackage is |
包体:
create or replace package body TestPackage is |