包的变量作用域测试说明

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 
时间: 2024-10-06 00:10:50

包的变量作用域测试说明的相关文章

Python--高阶函数、函数嵌套、名称空间及变量作用域、闭包、装饰器

1.高阶函数(map/reduce/filter) 高阶函数是指函数的参数可以是函数 这篇总结几个常用的高阶函数:map/reduce/filter map函数.reduce函数.filter函数都是Python中的内建函数. map函数 map函数的作用是将一个函数作用于一个序列的每一个元素,一行代码即可完成,不需要用我们平常喜欢用的循环.map将运算进行了抽象,我们能一眼就看出这个函数是对一个序列的每个元素进行了同样的一个操作.map()函数接收两个参数,一个是函数,一个是Iterable,

Sass学习笔记 -- 变量及变量作用域历史遗留问题

sass有两种后缀名文件: 一种后缀名为sass,写选择器时不能使用大括号和分号 一种后缀名为scss,使用大括号和分号 //后缀名为sass的语法,不能出现大括号和分号 $highlight-color: #abcdef .selected   border: 1px $highlight-color solid    //后缀名为scss的语法,跟css一样,需要大括号和分号 $highlight-color: #abcdef; .selected{   border:1px solid $

文件载入流程,函数的使用【函数名,参数【按引用赋值的问题】,函数体,【变量作用域和生命周期】】

1.求最大公约数辗转相除求值例如:12,8求最大公约数12%8=4[不为零]8%4=0[为零,则4为最大公约数][原理就是12,8的最大公约数和8,4的最大公约数一致][这个问题已经可被证明]计算机中最早的算法 2.文件载入---流程[php执行的先后顺序][php对代码的编译以文件为单位]先检查一个文件中的语法再进行编译然后才会一行行解释执行 [这一点需要注意]这里进行文件载入的流程讲解:php文件载入时,被引入的文件中的语法并不会解析,只有当该文件被执行[也就是被引入语句之后的部分才会报错]

HTML5 | Canvas中变量作用域与setInterval()方法的影响

Demo - 随机绘制圆环 实现思路: 将一个圆环的绘制分成100份,setInterval()方法定义每隔时间n绘制一段新的,每份的开始路径都是上一次的结束路径,实现步进绘制. 通过Math.random(),随机生成圆的坐标半径颜色. 实现方法: 定义画布和联系 设置步进属性 设置随机圆属性(5个参数:x,y,半径,开始,结束,方向) 循环执行绘画 <<index.html>> <!DOCTYPE html> <html> <head> &l

perl学习之六:变量作用域

变量作用域 (一)包变量 $x = 1 这里,$x是个包变量.关于包变量,有2件重要的事情要了解: 1)假如没有其他申明,变量就是包变量:2)包变量总是全局的. 全局意味着包变量在每个程序里总可访问到.在你定义了$x=1后,程序的任何其他部分,甚至在其他文件里定义的子程序,都能影响和修改$x的值.这点毫无例外:包变量总是全局的. 包变量被归类到族(叫做packages).每个包变量的名字包括2部分.这2部分类似于变量自己的名字和族名.假如喜欢,你可以称呼美国副总统为'AL',但对其全名'Al G

Go的变量作用域

Go 语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内部定义的变量称为局部变量 函数外部定义的变量称为全局变量 函数定义中传的变量称为形式参数 局部变量 在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量. 栗子~ 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func plus() int{ 8 //声明并初始化局

Objective-C语言-点语法和变量作用域[email&#160;protected] @synthesize和id

  一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : NSObject { int _age;//默认为@protected } - (void)setAge:(int)age; - (int)age; @end Person类的实现: #import "Person.h" @implementation Person - (void)setAge:(int)a

SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器

原文:SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 上期回顾: SSIS从理论到实战,再到应用(2)----SSIS包的控制流 首先我们来看看包里面的变量 SSIS包变量分为两种,一种是系统的内置变量,是一个SSIS包初使化都会自带的,一种是用户自己定义的变量. 在SSIS包中,常用的变量的类型包含以下:Int32,String,Boolean,DateTime,Object...... 二,让我们来看看包里面的约束(线) 如图中所示的线就是约束,官方的解释是这样

变量作用域与解构赋值

在JavaScript中,用var申明的变量实际上是有作用域的. 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量: 'use strict'; function foo() { var x = 1; x = x + 1; } x = x + 2; // ReferenceError! 无法在函数体外引用变量x 如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用.换句话说,不同函数内部的同名变量互相独立,互不影响: 'use stric