1、Oracle Package的作用:
oracle package是oracle包,是一组相关过程、函数、变量、常量#SinaEditor_Temp_FontName、类型和游标等PL/SQL程序设计元素的组合。包具有面向对象设计的特点,是对这些PL/SQL程序设计元素的封装。可以简化应用设计、提高应用性能、实现信息隐藏、子程序重载
- (1)包package声明或定义:包定义部分是创建包的规范说明,声明包内数据类型、变量、常量、游标等元素。
- 这部分也是为使用者提供了透明的接口。
- (2)包体packpage body:包体是包定义部分的具体实现。
- (3)将有联系的对象打成包,方便使用
- (4)包中对象包括储存过程,函数,游标,自定义类型和变量,可以在PL_SQL块中应用这些对象.
只有当包头编辑成功后才能编辑包体.其中的函数名与过程名须和包头中的函数过程一样.
- 1 包说明和包体必须有相同的名字
- 2 包的开始没有begin语句,与存储过程和函数不同。
- 3 在包的说明部分定义函数和过程的名称和参数,具体实现在包体中定义。
- 4 在包内声明常量、变量、类型定义、异常、及游标时不使用declare。
- 5 包内的过程和函数的定义不要create or replace语句。
- 6 包声明和包体两者分离。
2、ORACLE中的function 、package、package bodies、procedure的区别和相同:
- function有返回值,有参数;
- procedure无返回值,有参数;
- package、package body是同时存在的,就像.h和.cpp文件,如果要外部调用的,就在package里声明一下,包内调用的,只要在body里写就行了。package可包括function,procedure
3、在sqlserver中,直接写个存储过程就可以调用。但是在oracle中,我看好多资料上说要想调用存储过程必须把存储过程放进包中才能调用?是否是这样? 不是,存储过程也可以单独写,单独调用
4、packages 与 package bodies有什么区别?
packages中只有各个方法的定义,bodies中涉及具体的实现
5、我在存储过程就是procedures中写了个存储过程,再写个包名包含进去吗?还是可以直接在包中写包名:再把想写的存储过程直接写进包中就行啦呢? 不用
6、写进包,要写进哪个?packages 还是 package bodies
这两个是一体的,必须同时存在 。 package body和package都需要手工去写。
需要先创建package(也就是包的定义),再创建body。增加包中的过程或者修改包中过程的输入参数个数等也是要先改package再改body。