数据库程序包
程序包
简介
- 程序包时有PL/SQl程序元素(变量、类型等)和匿名PL/SQl块(如游标)、命名PL/SQL块(如存储过程和函数)组成。
- 程序包可以整体加载到内存中,可以大大加快程序包中任何一个组成部分的访问速度。
- dbms_output是程序包,而put_line是其中一个过程
组成
程序包规范 + 程序包主体
创建规范(包头)
- 模板
|
- 举例
create package pack_emp is |
注意:程序包规范一定要在主体之前创建。 同样只有包的规范没有包体,直接调用会报错。
创建包体
规范只有声明,没有实现,包体主要就是实现声明的部分。
- 模板
create [or replace] package body pack_name is |
注意:
- 常量、变量、游标、异常等复合数据类型,既可以在包头中出现,也可以出现包体中,在包头中声明叫做公共声明,在包体声明叫做私有声明,私有声明只能在包体中使用,外部无法调用。
- 仅在包体中定义的存储过程或者函数,而不在包头中声明,那么该存储过程或者函数是私有的,不能被外部调用。
- 包定义一定要在包主体前面编译,包主体可以没有,但包定义一定要有,包的名称和包体的名称要保持一致。但创建就不一定了。
- 总结:
A 包头跟包体必须是相同的名字
B 包的开始处是没有begin的
C 声明变量的时候不用declare
D 定义函数或者存储过程的时候,没有create or replace的字样
E 公共声明在包头的任何位置出现都可以,但是必须在引用前出现
程序包的使用
pack_name . 包中组成部分。
常见指令
- 编译包
alter package pack_name compile[body];
alter PACKAGE ‘||t.owner||’.’||t.object_name||’ COMPILE [body];
- 删除包
drop package [body] pack_name;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 noticase!
评论
ValineLivere