http://www.itpub.net/thread-1499223-12-1.html

119楼

执行下列语句之后,我的屏幕上会显示什么?

CREATEORREPLACEPACKAGEplch_pkgISg_publicNUMBER:=1;PROCEDUREdo_stuff;FUNCTIONget_stuffRETURNNUMBER;END;/CREATEORREPLACEPACKAGEBODYplch_pkgISPROCEDUREdo_stuffISBEGINDBMS_OUTPUT.put_line(g_public);END;FUNCTIONget_stuffRETURNNUMBERISBEGINdo_stuff;RETURNg_public+1;END;BEGINDBMS_OUTPUT.put_line(g_public);g_public:=2;END;/BEGINDBMS_OUTPUT.put_line(plch_pkg.get_stuff);plch_pkg.g_public:=plch_pkg.get_stuff;DBMS_OUTPUT.put_line(plch_pkg.get_stuff);END;/

(A)

1

(B)

12

(C)

123

(D)

1234

(E)

12334

(F)

123234

实测答案为F

SQL>PackagecreatedPackagebodycreated123234PL/SQLproceduresuccessfullycompletedSQL>

答案说明在125楼

2011-11-8 答案F.

包头声明的初始值先于包体。包体第一次被调用时会执行初始化代码,因而将包头里面的初始值覆盖了。