oracle子程序建表,OraclePLSQL之子程序和包.pdf

OraclePLSQL之子程序和包

下载

第5章 使用子程序和包

在上一章中,我们讨论了创建过程,函数和包的细节。在本章中,我们介绍这些部件的功

能,存储子程序和本地子程序的区别,存储子程序与数据字典的交互方式及如何从 S Q L语句中

调用存储子程序。除此之外,我们还要介绍 O r a c l e 8 i存储子程序的新增特性。

5.1 子程序位置

我们已在前几章中演示了可以存储在数据字典中的子程序和包。子程序首次是用命令

C R E ATE OR REPLACE创建的,接着,我们可以从其他 P L / S Q L块中调用已创建的子程序。除此

之外,子程序可以在块的声明部分定义,以这种方式定义的子程序叫做本地子程序。包则必须

存储在数据字典中,而不能在本地定义存储。

5.1.1 存储子程序和数据字典

当使用命令C R E ATE OR REPLACE 创建子程序时,该子程序就存储在数据字典中。除去子

程序中的源文本外,该子程序是以编译后的中间代码形式存储的,这种中间代码叫做 p - c o d e 。中

间代码中带有子程序中经计算得到的所有引用参数,子程序的源代码也被转换为 P L / S Q L 引擎易

读的格式。当调用子程序时,就将中间代码从磁盘读入并启动执行。一旦从磁盘读入 中间代码,

系统就将其存储在系统全局工作区( S G A )的共享缓冲区部分,以便由多个用户同时进行访问。

与缓冲区的所有内容一样,根据系统采用的最近最少使用的算法,过期的中间代码将被从共享

缓冲区中清除。

中间代码类似于由3 G L语言生成的对象代码,或者类似于可由 J a v a运行时使用的J a v a字节码。

由于中间代码带有经计算得到的子程序中的所有对象引用(属于前联编的属性),所以,执行中

间代码的效率非常高。

子程序的信息可以通过各种数据字典视图来访问。视图 u s e r _ o b j e c t s包括了当前用户拥有的

所有对象的信息。该信息包括了对象的创建以及最后修改的时间,对象类型(表,序列,函数

等)和对象的有效性。视图 u s e r _ s o u r c e 包括了对象的源程序代码。而视图 u s e r _ e r r o r s则包括了编

译错误信息。

请看下面的简单过程:

CREATE OR REPLACE PROCEDURE Simple AS

v_Counter NUMBER;

BEGIN

v_Counter := 7;

END Simple;

创建该过程后,视图 u s e r _ o b j e c t s 显示该过程是合法的,视图 u s e r _ s o u r c e 则包括了该过程的

源代码。由于该过程已经编译成功,所以视图 u s e r _ e r r o r s 没有显示错误。图 5 - 1 的窗口显示了上

第5章 使用子程序和包计计149

下载

述信息。

如果我们修改了过程 S i m p l e 的代码,就会出现编译错误(源程序中缺少一个分号),修改过

的该过程如下:

CREATE OR REPLACE PROCEDURE Simple AS

v_Counter NUMBER;

BEGIN

v_Counter := 7

END Simple;

图5-1 成功编译后的数据字典视图

分析图5 - 2所示的相同的三个数据字典,我们不难看出有几个不同之处。首先, u s e r _ s o u r c e 仍然

显示了该过程的源代码。然而, u s e r _ o b j e c t s 中的状态指示为非法,而不是前面例子的合法提示,

u s e r _ e r r o r s 中有一条编译错误信息P L S - 1 0 3 。

提示 在SQL *Plus 中,命令SHOW ERRORS将为用户查询u s e r _ e r r o r s 并将输出数据格

式为用户可读的形式。该命令将返回最后创建的对象的错误信息。如果编译程序出现了

错误提示: ‘Warn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值