变量的作用域和可见性设计变量在块中的位置,不同的位置使得变量具有不同的有效性与可访问性。

  变量的作用域是指可以使用变量的程序单元部分,可以是包和子程序包等。

当一个变量在它的作用域中可以用一个不限定的名字来引用时,就称之为可见性。一般标识符在他的作用域内部是可见的。

  在PL/SQL块或子程序中定义的变量仅在本地可用,如果在块之外访问变量是非法的,这种变量称之为本地变量。当变量超出其作用域是,变量使用的内存将会被释放,直到变量被从新定义并初始化。

  PL/SQL变量的作用域和可见性在嵌套块中时,需要特别注意变量的作用域与可见性问题,如果PL/SQL块中包含嵌套的子块,那么在外部块中定义的变量对于子块来说是全局的,如果全局变量在子块中又被从新声明,那么全局变量和本地声明的变量在子块的作用域都是存在的,想要访问外部的全局变量需要使用限定修饰符。

例如:

<<outer>>

DECLARE

  v_empname varchar2(20);        --定义外层快变量

  BEGIN

  v_empname:='张三';       --为外层外的变量赋初值

  <<inner>>

  DECLARE

    v_empname VARCHAR2(20);    --定义与外层块同名的内层块变量

  BEGIN

  v-emp_name:='李四';                         --为内层块变量赋值

  --输出内层块的变量

  DBMS_OUTPUT.put_line('内层块的员工名称:'||v_empname);

  --在内层块中访问外层块的变量

  DBMS_OUTPUT.put_line('外层块的员工名称'||outer.v_empname);

EDN;

DBMS_OUTPUT.put_line('outer员工名称'||v_empname);     --在外层块中访问变量

END;

代码中定义了一个命名的块outer,在outer内部有嵌套了一个Inner块,这两个块都定义了v_empname变量。

注:如果子块中从新声明了变量,本地变量优先权将高于全局变量。外层块无法对内层块的变量访问。

PL/SQL变量的作用域和可见性的更多相关文章

  1. PL/SQL变量和类型

    变量 在定义变量时一定要为其指定一个类型,类型可以是PL/SQL类型或SQL语言的类型,一旦变量的类型确定,那么变量中所能存储的值也就确定了,因此尽管变量的值会经常改变,但是值的类型是不可以变化的. ...

  2. pl sql 变量的声明和赋值

    链接地址:http://www.cnblogs.com/zhengcheng/p/4168670.html 一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的 ...

  3. 二十四、oracle pl/sql 变量

    一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...

  4. oracle pl/sql 变量

    一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...

  5. Oracle的pl/sql变量类型

    pl/sql定义 sql是结构化查询语言.sql是不是一个编程语言?编程语言一般都能够声明变量,写条件判断,循环.sql不具备这些特征,所有sql不是一门编程语言.我们在实际的开发中,有这种需要,把s ...

  6. PL/SQL之--变量

    一.PL/SQL 简介 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是oracle对sql语句的一种扩展,在普通SQL语句的使用上 ...

  7. PL/SQL 02 声明变量 declare

    语法:identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr] identifier:用于指定变量或常量的名称.CONSTANT:用于 ...

  8. PL/SQL学习笔记_01_基础:变量、流程控制

    PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command  窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command  窗口中运行的步骤如下: 1)File—new com ...

  9. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

随机推荐

  1. java web 读取数据库数据写入Excel返回浏览器下载

    @RequestMapping(value = "/download", method = RequestMethod.GET) public void downstudents( ...

  2. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

  3. Setup Factory使用

  4. python写算法中的栈

    ########### 栈的使用 ############### class StackFullError(Exception): pass class StackEmptyError(Excepti ...

  5. python生成数据后,快速导入数据库

    1.使用python生成数据库文件内容 # coding=utf-8import randomimport time def create_user():    start = time.time() ...

  6. uboot - the bootloader of linux

    [转载]https://blog.csdn.net/kernel_yx/article/details/53045424 最近一段时间一直在做uboot移植相关的工作,需要将uboot-2016-7移 ...

  7. redis 3.2 新数据结构:quicklist、String的embstr与raw编码方式分界点

    Redis3.2.0引入了新的quicklist的数据结构做了list的底层存储方案.废弃了原来的两个配置参数, list-max-ziplist-entries list-max-ziplist-v ...

  8. 让我怀疑人生的bug集合

    bug1:一个人人都知道全局变量易污染,但是我就是污染不了的问题 解决:刚开始动用了session来存这个值,后来觉得太小题大做了,最后使用了闭包来解决,第一个function结束后开启第二个,起初没 ...

  9. #WEB安全基础 : HTTP协议 | 0x14 HTTP的详细安全问题

    我们提到过HTTP是不安全的. 由于任何人都可以向服务器发送请求,而并不会验证身份,所以这就会引发一些问题: 1,发出响应的服务器是否为正确的服务器 2,发送请求的客户端是否为正确的客户端 3,通信双 ...

  10. 在CentOS上安装Python3的三种方法

    Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x你可以按照此文的三个方法进行安装. 注:本文示例安装版本为Python3.5, 一.Python源代码编译安装 安 ...