|
2011-11-8 答案F.
包头声明的初始值先于包体。包体第一次被调用时会执行初始化代码,因而将包头里面的初始值覆盖了。
===================================================
2011-11-9 11G新功能:PL/SCOPE
注:关于PL/SCOPE可参考我翻译的这篇文章:
http://www.itpub.net/thread-1336860-1-1.html
我在会话中打开PL/Scope:
ALTER SESSION SET plscope_settings='identifiers:all'
/
然后我创建了如下的表和包:
CREATE TABLE plch_stuff
(
amount NUMBER
, rating INTEGER
)
/
CREATE OR REPLACE PACKAGE plch_pkg
IS
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语句。
|
|