Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 1. 包中作用域種類說明以及聲明位置 a. publish、private、locavariable 三種類型,當然每種類型包括了變數、函數、類型等。 b. publish類聲明在非包 ...
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
1. 包中作用域種類說明以及聲明位置
a. publish、private、locavariable 三種類型,當然每種類型包括了變數、函數、類型等。
b. publish類聲明在非包體中(不帶body的)
private類聲明在包體中
locavariable類聲明在包中函數、過程對象裡面的
2. 作用域說明
a. publish類,包外可以使用,可以進行取值、賦值操作,每次使用本變數時,包體中的begin-end模塊會被初始化,同時此類變數生存周期是會話的生存周期,當包被重新編譯,此變數將被重新初始化,否則只初始化一次。
b. private類,包外不可以使用,作用域限定待包體中(帶body的),生存周期是會話周期,周期內只被初始化一次,當包被重新編譯,此變數將被重新初始化
c. locavariable類變數,作用域是在函數、過程等對象用,與一般函數變數聲明一致。
4. 註意:
包中的begin-end模塊,在每次調用包的時候都需要進行初始化運行。
3. 測試demo
創建測試包
create or replace package testpkg is -- Author : ZHENGZY -- Created : 2013/5/21 9:57:02 -- Purpose : 測試包的特性 -- Public constant declarations Cons_Varchar constant varchar2(100) := 'TestPkg'; -- Public variable declarations V_GlobVarchar varchar2(1000) := '1000'; V_Globinteger INTEGER; -- Public function and procedure declarations function fc_IncNumAndConnStr return varchar2; end testpkg; create or replace package body testpkg is -- Private constant declarations Cons_Varchar2 constant varchar2(100) := 'TestPkgPrivate'; -- Private variable declarations V_GlobVarchar2 varchar2(1000); V_Globinteger2 INTEGER; -- Function and procedure implementations function fc_IncNumAndConnStr return varchar2 is V_Result varchar2(2000); begin V_globvarchar := V_globvarchar ||' HELLO'; V_globinteger := NVL(v_globinteger,0) + 1; V_Globinteger2 := nvl(V_Globinteger2,0) + 1; V_Result :='V_Globvarchar=' ||V_Globvarchar||to_char(v_globinteger) || chr(13) || 'V_globVarchar2=' ||V_globVarchar2 ||chr(13)|| 'V_globVarchar3='||to_char(V_Globinteger2); return(V_Result); end; begin V_globVarchar2 := V_globVarchar2||'body ini.'; end testpkg;
create or replace package testpkg2 is -- Created : 2013/5/21 10:18:46 -- Purpose : 測試公共變數 -- Public function and procedure declarations function fc_setvaluetovar return varchar2; end testpkg2; create or replace package body testpkg2 is function fc_setvaluetovar return varchar2 is result varchar2(200); begin testpkg.V_GlobVarchar := testpkg.V_GlobVarchar|| 'hello'; result := testpkg.V_GlobVarchar; return(Result); end; begin null; end testpkg2;
執行語句:
SELECT TESTPKG.FC_INCNUMANDCONNSTR FROM DUAL; SELECT TESTPKG2.FC_SETVALUETOVAR FROM DUAL;
首次執行結果:
V_Globvarchar=1000 HELLO1 V_globVarchar2=body ini. V_globVarchar3=1 -- 1000 HELLOhello
第二次結果:
V_Globvarchar=1000 HELLOhello HELLO2 V_globVarchar2=body ini. V_globVarchar3=2
1000 HELLOhello HELLOhello