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 
  • 相关阅读:
    03_ if 练习 _ little2big
    uva 11275 3D Triangles
    uva 12296 Pieces and Discs
    uvalive 3218 Find the Border
    uvalive 2797 Monster Trap
    uvalive 4992 Jungle Outpost
    uva 2218 Triathlon
    uvalive 3890 Most Distant Point from the Sea
    uvalive 4728 Squares
    uva 10256 The Great Divide
  • 原文地址:https://www.cnblogs.com/wildfox/p/5791217.html
Copyright © 2011-2022 走看看