zoukankan      html  css  js  c++  java
  • 包的变量作用域测试说明

    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 
  • 相关阅读:
    jQuery事件
    php学习注意事项
    取消php上传2M的限制(windows服务器)
    PHP编程值得注意的细节
    jQuery load()方法特殊用法!
    PHP显示乱码和apache内部编码问题的解决
    定制Apache索引样式
    这么长时间也没有人看看我
    加载php5apache2_2.dll失败的处理方法
    WinXP下的ApachePHPMySQL安装和配置
  • 原文地址:https://www.cnblogs.com/wildfox/p/5791217.html
Copyright © 2011-2022 走看看