怎么使用数据库新功能PL/SCOPE
本篇内容主要讲解“怎么使用数据库新功能PL/SCOPE”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用数据库新功能PL/SCOPE”吧!
我在会话中打开PL/Scope:
ALTERSESSIONSETplscope_settings='identifiers:all'/
然后我创建了如下的表和包:
CREATETABLEplch_stuff(amountNUMBER,ratingINTEGER)/CREATEORREPLACEPACKAGEplch_pkgISPROCEDUREdo_stuff;ENDplch_pkg;/CREATEORREPLACEPACKAGEBODYplch_pkg.......ENDplch_pkg;/
噢,抱歉,我不能让你看到包体的代码!请继续....
我对PL/Scope的USER_IDENTIFIERS视图进行如下查询:
SELECTtype,usageFROMuser_identifiersWHEREobject_name='PLCH_PKG'ORDERBY1,2/
我看到这些结果:
TYPEUSAGE-----------------------------FUNCTIONCALLITERATORDECLARATIONITERATORREFERENCELABELDECLARATIONPACKAGEDECLARATIONPACKAGEDEFINITIONPROCEDUREDECLARATIONPROCEDUREDEFINITIONVARIABLEDECLARATIONVARIABLEREFERENCEVARIABLEREFERENCE
下面关于plch_pkg包的哪些句子是正确的?
(A)
包体里面没有任何私有(PRIVATE)的子程序。
(B)
do_stuff过程里面可能包含一个FORALL语句。
(C)
包体里面必须包含一个PACKAGE级别的变量(即不是在do_stuff里面声明的)。
(D)
do_stuff过程必须包含一个GOTO语句。
2011-11-9答案AB.(A)包体里面没有任何私有(PRIVATE)的子程序。对应每个包里定义的过程你会看到两条记录:PROCEDUREDECLARATIONPROCEDUREDEFINITION对应每个包里定义的函数你会看到两条记录:FUNCTIONDECLARATIONFUNCTIONDEFINITION结果里面只有这样一对:PROCEDUREDECLARATIONPROCEDUREDEFINITION它就是对应于do_stuff过程,不再有其他子程序了。(B)do_stuff过程里面可能包含一个FORALL语句。一个FORALL语句就像一个FOR循环,定义并且使用隐性游标。输出里这两行:ITERATORDECLARATIONITERATORREFERENCE有可能对应FORALL语句。(C)包体里面必须包含一个PACKAGE级别的变量(即不是在do_stuff里面声明的)。这仅仅是“可能”而非“必须”。我们知道包体里面某处定义了一个变量,根据是这两行输出:VARIABLEDECLARATIONVARIABLEREFERENCE但这个变量可能在do_stuff内部定义。为了确定这个变量是不是PACKAGE级的,你必须知道所有程序单元的最小行号,然后看看这个变量定义行号是否在此之前。(D)do_stuff过程必须包含一个GOTO语句。输出里面有这一行:LABELDECLARATION因此我们知道有一个标号被声明了,它可能出现在程序某处,像这样:<<label_name>>但是输出里面并没有指示这个标号被引用,否则的话我们应该看到另外一行输出:LABELREFERENCE(newkid加注:即使看到标号被引用,也不意味着GOTO,比如退出循环的EXIT也可以引用标号)
到此,相信大家对“怎么使用数据库新功能PL/SCOPE”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。