PL/SQL变量的作用域和可见性
变量的作用域和可见性设计变量在块中的位置,不同的位置使得变量具有不同的有效性与可访问性。
变量的作用域是指可以使用变量的程序单元部分,可以是包和子程序包等。
当一个变量在它的作用域中可以用一个不限定的名字来引用时,就称之为可见性。一般标识符在他的作用域内部是可见的。
在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变量的作用域和可见性的更多相关文章
- PL/SQL变量和类型
变量 在定义变量时一定要为其指定一个类型,类型可以是PL/SQL类型或SQL语言的类型,一旦变量的类型确定,那么变量中所能存储的值也就确定了,因此尽管变量的值会经常改变,但是值的类型是不可以变化的. ...
- pl sql 变量的声明和赋值
链接地址:http://www.cnblogs.com/zhengcheng/p/4168670.html 一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的 ...
- 二十四、oracle pl/sql 变量
一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...
- oracle pl/sql 变量
一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...
- Oracle的pl/sql变量类型
pl/sql定义 sql是结构化查询语言.sql是不是一个编程语言?编程语言一般都能够声明变量,写条件判断,循环.sql不具备这些特征,所有sql不是一门编程语言.我们在实际的开发中,有这种需要,把s ...
- PL/SQL之--变量
一.PL/SQL 简介 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是oracle对sql语句的一种扩展,在普通SQL语句的使用上 ...
- PL/SQL 02 声明变量 declare
语法:identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr] identifier:用于指定变量或常量的名称.CONSTANT:用于 ...
- PL/SQL学习笔记_01_基础:变量、流程控制
PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command 窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command 窗口中运行的步骤如下: 1)File—new com ...
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
随机推荐
- kubernetes in action - Overview
传统的应用都是“monoliths”,意思就是大应用,即所有逻辑和模块都耦合在一起的 这样明显很挺多问题的,比如只能scale up,升级必须整体升级,扩容 所以我们就想把大应用,broken dow ...
- tableview Footerview有多余的间距
调整footerView的高度 UIView *footerV = [[UIView alloc] initWithFrame:CGRectMake(, , Main_Screen_Width, )] ...
- Autofac之依赖注入
这里主要学习一下Autofac的依赖注入方式 默认构造函数注入 class A { public B _b; public A() { } public A(B b) { this._b = b; } ...
- C++11 新特性之operator "" xxx
从C++11开始,我们可以使用以下形式通过常量字符串构造自定义类型, 比如: class Person { public: Person(const std::string& name): _ ...
- Publisher/Subscriber
public interface IPublisher { void Publish<T>(T data); void Subscribe<T>(object subscrib ...
- Word操作——通配符
参考资料:https://www.cnblogs.com/whchensir/p/5768030.html (1)查找引号中的内容 (“*”) ^p\1^p (2)按照句号,分号换行,当有引号时不换行 ...
- MongoDB系列----查
开启查询: db.getMongo().setSlaveOk() 查版本: db.servion(); db.serverBuildInfo(); db.serverStatus().storageE ...
- namenode No valid image files
1,角色日志报错 Encountered exception loading fsimage java.io.FileNotFoundException: No valid image files f ...
- meta 标签汇总
HTML 里 meta常用标签: " class="mathcode" src="https://private.codecogs.com/gif.latex? ...
- 重谈react优势——react技术栈回顾
react刚刚推出的时候,讲react优势搜索结果是几十页. 现在,react已经慢慢退火,该用用react技术栈的已经使用上,填过多少坑,加过多少班,血泪控诉也不下千文. 今天,再谈一遍react优 ...