码迷,mamicode.com
首页 > 其他好文 > 详细

包的变量作用域测试说明

时间:2016-08-20 21:43:25      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

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 

 

包的变量作用域测试说明

标签:

原文地址:http://www.cnblogs.com/wildfox/p/5791217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!