ORACLE的程序包不该忽视的东西

1.程序包就相当于JAVA中的类

2.程序包效率高的原因是:当程序首次调用包内函数或过程时,ORACLE将整个包调入内存,当再次访问包内元素时,ORACLE直接从内存中读取,而不需要进行磁盘I/O操作,从而使程序执行效率得到提高。

3.包有两部分组成

     (1).包说明(规范)(PACKAGE SPECIFICATION):包说明部分声明包内数据类型、变量、常量、游标、子程序和异常错误处理等元素,这些元素为包的公有元素。

     (2).包体(PACKAGE BODY):包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。

    包说明和包主体分开编译,并作为两部分分开的对象存放在数据库字典中,可查看数据字典user_source, all_source, dba_source,分别了解包说明与包主体的详细信息。

4.包名是唯一的,但不同包中的公有组件可以是相同的,通过包名.公有组件名来区分

5.创建包体时,有以下几点需要注意:

     包体只能在包说明被创建或编译后才能进行创建或编译。

     在包体中实现的过程、函数、游标的名称必须与包说明中的过程、函数、游标一致,包括名称、参数的名称以及参数的模式(IN、OUT、IN OUT)。并建设按包说明中的次序定义包体中具体的实现。

     在包体中声明的数据类型、变量、常量都是私有的,只能在包体中使用而不能被印刷体外的应用程序访问与使用。

     在包体执行部分,可对包说明,包体中声明的公有或私有变量进行初始化或其它设置。

6. 在数据字典中查看程序包规范和包主体的信息
    select object_name,object_type,status from user_objects
    where lower(OBJECT_NAME) = 'pkg_staff'

参考文章:http://www.cnblogs.com/huyong/archive/2011/05/26/2057973.html

原文地址:https://www.cnblogs.com/violin508/p/4321484.html