怎么使用数据库新功能PL/SCOPE

37次阅读
没有评论

共计 1738 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容主要讲解“怎么使用数据库新功能 PL/SCOPE”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“怎么使用数据库新功能 PL/SCOPE”吧!

我在会话中打开 PL/Scope:

ALTER SESSION SET plscope_settings= identifiers:all 
/

然后我创建了如下的表和包:

CREATE TABLE plch_stuff
 amount NUMBER
, rating INTEGER
CREATE OR REPLACE PACKAGE plch_pkg
 PROCEDURE do_stuff;
END plch_pkg;
CREATE OR REPLACE PACKAGE BODY plch_pkg
.......
END plch_pkg;
/

噢,抱歉,我不能让你看到包体的代码!请继续 ….

我对 PL/Scope 的 USER_IDENTIFIERS 视图进行如下查询:

SELECT type, usage
 FROM user_identifiers
WHERE object_name =  PLCH_PKG 
ORDER BY 1, 2
/

我看到这些结果:

TYPE USAGE
------------------ -----------
FUNCTION CALL 
ITERATOR DECLARATION
ITERATOR REFERENCE 
LABEL DECLARATION
PACKAGE DECLARATION
PACKAGE DEFINITION
PROCEDURE DECLARATION
PROCEDURE DEFINITION
VARIABLE DECLARATION
VARIABLE REFERENCE 
VARIABLE REFERENCE

下面关于 plch_pkg 包的哪些句子是正确的?

(A)

包体里面没有任何私有 (PRIVATE) 的子程序。

(B)

do_stuff 过程里面可能包含一个 FORALL 语句。

(C)

包体里面必须包含一个 PACKAGE 级别的变量(即不是在 do_stuff 里面声明的)。

(D)

do_stuff 过程必须包含一个 GOTO 语句。
2011-11- 9 答案 AB.
包体里面没有任何私有 (PRIVATE) 的子程序。
对应每个包里定义的过程你会看到两条记录:PROCEDURE DECLARATION
PROCEDURE DEFINITION
对应每个包里定义的函数你会看到两条记录:FUNCTION DECLARATION
FUNCTION DEFINITION
结果里面只有这样一对:PROCEDURE DECLARATION
PROCEDURE DEFINITION
它就是对应于 do_stuff 过程,不再有其他子程序了。do_stuff 过程里面可能包含一个 FORALL 语句。
一个 FORALL 语句就像一个 FOR 循环,定义并且使用隐性游标。输出里这两行:ITERATOR DECLARATION
ITERATOR REFERENCE 
有可能对应 FORALL 语句。包体里面必须包含一个 PACKAGE 级别的变量(即不是在 do_stuff 里面声明的)。
这仅仅是“可能”而非“必须”。我们知道包体里面某处定义了一个变量,根据是这两行输出:VARIABLE DECLARATION
VARIABLE REFERENCE
但这个变量可能在 do_stuff 内部定义。为了确定这个变量是不是 PACKAGE 级的,你必须知道所有程序单元的最小行号,然后看看这个变量定义行号是否在此之前。do_stuff 过程必须包含一个 GOTO 语句。
输出里面有这一行:
LABEL DECLARATION
因此我们知道有一个标号被声明了,它可能出现在程序某处,像这样:label_name 
但是输出里面并没有指示这个标号被引用,  否则的话我们应该看到另外一行输出:LABEL REFERENCE(newkid 加注:即使看到标号被引用,也不意味着 GOTO,  比如退出循环的 EXIT 也可以引用标号)

到此,相信大家对“怎么使用数据库新功能 PL/SCOPE”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计1738字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)