日期:2014-05-16  浏览次数:20469 次

公司需求知识自学-Oracle的Package的作用及用法

Oracle的Package的作用

简化应用设计、提高应用性能、实现信息隐藏、子程序重载。

1、Oracle的Package除 了把存储过程放到一堆儿以外还有没有其他的作用(好处)?

你不觉得把存储过程分门别类是很重要的么,而且不同的package的存储过程可以重 名。
用package不仅能把存储过程分门别类,而且在package里可以定义公共的变量/类型,既方便了编程,又减少了服务器的编译开销。

2、如何把现有的存储过程加入到Package中?
copy and pasty,不过调用的时候要带包名了。

3、除了使用SQL Plus,还有没有什么工具做Package? 
也有方便的第三方工具了,不过得自己找了。
用第三方工具吧,比如sql navigator。www.quest.com

4、使用SQL Plus编译Package,是否每次都是编译Package中所有的存储过程? 



包也是一种命名pl/sql块,和存储过程、函数一下,都是在数据库启动的时候就载入内存的。开销的大小很难判断,因为你不用包,但是要完成包的功能的话,还是要用PL/SQL来完成的,服务器一样有开销。相对来说,用包少了SQL的语法分析、解释过程,开销还少一点。 

“过程一般都不超过20行”那我倒很少遇到。用不用子过程关键要看是不是能定义可重用的子过程,用子过程效率不会低。

包的作用:包可以将任何出现在块声明的语句(过程,函数,游标,游标,类型,变量)放于包中,相当于一个容器.将声明语句放入包中的好处是:用户可以从其他PL/SQL块中对其进行引用,因此包为PL/SQL提供了全程变量.

包分为两部分:包头和包体.

如何创建包?

1)包头:

  语法格式:

  CREATE OR REPLACE PACKAGEpackage_name /*包头名称*/

  IS|AS pl/sql_package_spec                     /*定义过程,函数以及返回类型,变量,常量及数据类型定义*/

 定义包头应当遵循以下原则:

 1)包元素位置可以任意安排.然而在声明部分,对象必须在引用前进行声明.

 2)包头可以不对任何类型的元素进行说明.例如,包头可以只带过程和函数说明语句,而不声明任何异常和类型.

 3)对过程和函数的任何声明都必须只对子程序和其参数进行描述,不能有任何代码的说明,代码的实现只能在包体中出现.它不同于块声明,在块声明中,过程和函数的代码可同时出现在声明部分.

2.包体:

 语法格式:

 CREATE OR REPLACE PACKAGE BODY package_name/*包名必须与包头的包名一致*/

 IS | AS pl/sql_package_body                    /*游标,函数,过程的具体定义*/

包体是与包头相互独立的,包体只能在包头完成编译后才能进行编译.包体中带有包头中描述的子程序的具体实现的