替换变量可看作是占位符

一、 单个&符号替换

SQL语句中最基本、最普遍元素替换形式是单个&符号替换。&符号是用来在语句中指定替换变量的符号。当执行语句时,Oracle服务器处理语句,发现替换变量,并尝试用下面两种方法之一来解析变量的值。首先,它检查在用户会话中是否定义了该变量(DEFINE命令)。倘若没有,用户进程会提示输入一个值,这个值会替换变量。

如下所示:

SQL> select ename,sal from emp where empno=&number;
Enter value for number: 7934
old 1: select ename,sal from emp where empno=&number
new 1: select ename,sal from emp where empno=7934 ENAME SAL
---------- ----------
MILLER 1300

二、&&符号替换

倘若在多次查询中用到同一替换变量,且该替换变量的值不变,可用&&替换。当oracle服务器遇到&&替换变量时,用进程会提示输入一个值,该值即为该变量的会话值,当后续查询引用该替换变量时,会直接替换为该变量会话值,用户进程不再提示输入值。

如下所示:

SQL> select ename,sal from emp where empno=&&number;   -->> 注意,&&符号替换,第一次出现,会提示输入值
Enter value for number: 7934 -->> 输入值
old 1: select ename,sal from emp where empno=&&number
new 1: select ename,sal from emp where empno=7934 ENAME SAL
---------- ----------
MILLER 1300 SQL> select ename,sal from emp where empno=&number; -->> 直接引用,不再提示输入新值
old 1: select ename,sal from emp where empno=&number
new 1: select ename,sal from emp where empno=7934 ENAME SAL
---------- ----------
MILLER 1300 SQL> select ename,sal from emp where empno=&&number; -->> 第二次出现,同样不再提示输入值,number在整个会话期间始终有效
old 1: select ename,sal from emp where empno=&&number
new 1: select ename,sal from emp where empno=7934 ENAME SAL
---------- ----------
MILLER 1300

三、替换列名

上述替代变量替代的基本上是where子句中的元素,但实际上SQL语句中的任何元素都是可以替换的对象。如下所示,第三列被替换:

SQL> select empno,ename,&&col from emp order by &col;  -->> 第三列即为替换变量
Enter value for col: sal -->> 在这里,我们既可以选sal,也可以选择hiredate
old 1: select empno,ename,&&col from emp order by &col
new 1: select empno,ename,sal from emp order by sal EMPNO ENAME SAL
----- ---------- ----------
7369 SMITH 800
7900 JAMES 950
7876 ADAMS 1100
7521 WARD 1250
...

四、 替换表达式和文本

在运行时几乎可以替换SQL语句的任何元素。条件是Oracle要求至少第一个单词是静态的。在SELECT语句中,至少需要SELECT关键字不变,如下所示:

SQL> select &rest_of_statements;
Enter value for rest_of_statements: ename from emp where empno=7839
old 1: select &rest_of_statements
new 1: select ename from emp where empno=7839 ENAME
----------
KING

五、 DEFINE

当相同变量在语句中多次出现时,可以使用&&替换来避免重复输入。当出现&&替换时,变量被保存为会话变量。随着语句的进行,会使用保存的会话变量自动解析所有后续出现的该变量。这不一定是用户需要的,此时,可以使用UNDEFINE variable来解除,如上文中的UNDEFINE col,UNDEFINE number。

DEFINE命令有两个目的:它可用来检索SQL会话中当前定义的所有变量列表;还可用来显式定义会话期间在一个或者多个语句中作为替换变量引用的变量的值。语法分别如下所示:

DEFINE;

DEFINE variable=value;

替换变量使用的前缀通常是 & 或者 &&。这是标识替换变量的默认字符。在SQL*PLus中,使用一个特殊的SET命令选项,就可以把默认的字符(&)修改为其他字符,或者禁用替换变量特性。SET命令的语法如下:

SET DEFINE character;

SET DEFINE ON;

SET DEFINE OFF;

第一个SET命令选项会把替换变量的前缀从&修改为其他字符。这个字符不能为数字或者空白字符。第二个命令选项和第三个命令选项控制SQL*Plus是否会查找替换变量。除此之外,ON选项会把替换字符重修修改为&。

六、 VERIFY命令

操作Oracle服务器时可以使用两类命令:SQL语言命令和SQL客户控制命令。SELECT语句是语言命令,而SET命令控制SQL客户环境。有许多不同的语言和控制命令可用,但与替换有关的控制命令是DEFINE和VERIFY。

VERIFY命令控制提交的替换变量是否显示到屏幕上,以便验证替换是否正确。显示的消息由旧子句和包含替换变量的输入值的新子句组成。如下所示:

SQL> select ename,sal from emp where empno=&number;
Enter value for number: 7788
old 1: select ename,sal from emp where empno=&number
new 1: select ename,sal from emp where empno=7788 ENAME SAL
---------- ----------
SCOTT 3000 SQL> set verify off
SQL> select ename,sal from emp where empno=&number;
Enter value for number: 7788 ENAME SAL
---------- ----------
SCOTT 3000

替换变量&和&&的更多相关文章

  1. SQL*Plus中替换变量与定义变量

    替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...

  2. SQL:define和verify命令及替换变量&

    =================替换变量&===============使用一个&符号来指定一个变量值,执行SQL语句时,会提示用户输入一个数值. SQL> select sa ...

  3. Spring boot项目maven的profile多环境配置不自动替换变量的问题解决

    Spring boot项目maven的profile多环境配置不自动替换变量的问题解决   在网上找了好久,配置都很简单,可是我的程序就是不能自动替换变量,最终单独测试,发现原来是引用spring b ...

  4. [转载]js正则表达式/replace替换变量方法

    原文地址:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html JavaScript正则实战(会根据最近写的不断更新) 1.j ...

  5. js正则表达式/replace替换变量方法

    转自:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html 1. javascript 正则对象替换创建和用法:/patter ...

  6. JS replace()方法替换变量(可以对变量进行全文替换)

    转至:http://blog.sina.com.cn/s/blog_6552200b0102ve60.html 事情是这样的: 我要用 JS 替换一个多行文本的关键字 正常,没有变量的时候应该是这样: ...

  7. 执行ORACLE SQL时如何 忽略替换变量(转载)

    你想在SQL*Plus里执行一个脚本,脚本里包含了一些看起来像替换变量的元素,但实际上你并不是想把它们当替换变量来处理.这时你想让解析器忽略它们而不是提示用户输入.解决方案1有一种解决方案就是在&am ...

  8. vim正则表达式的替换变量

    在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1.\2 等变量来访问 \( 和 \) 中的内容. 例如有下列英汉对照文本: adapter 适配器address 地址alge ...

  9. 【RMAN】RMAN脚本中使用替换变量

    [RMAN]RMAN脚本中使用替换变量--windows 下rman全备脚本 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

随机推荐

  1. android 编译代码注意事项

    1 安装openjdk1.7 sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-apt update sudo apt-get install op ...

  2. HDU4430 Yukari's Birthday(枚举+二分)

    Yukari's Birthday  HDU4430 就是枚举+二分: 注意处理怎样判断溢出...(因为题目只要10^12) 先前还以为要用到快速幂和等比数列的快速求和(但肯定会超__int64) 而 ...

  3. windows management instrumentation服务未启动-解决脚本

    桌面新建.txt文件 将以下代码放入 保存为.bat文件 执行即可 @echo on cd /d c:\temp if not exist %windir%\system32\wbem goto Tr ...

  4. 新版SDWebImage的使用

    第一步,下载SDWebImage,导入工程.github托管地址https://github.com/rs/SDWebImage 第二步,在需要的地方导入头文件 1 #import "UII ...

  5. 淘宝上倒卖新浪微盘事件来龙去脉——谈谈巧用IMEI

    这是一个老黄历的事件,曾记得淘宝上的卖家卖10元卖50g网络硬盘,并且卖的相当的火,一个月就卖了500个账号.由于我也是那个事件的亲身经历者之一,这里就看到了IMEI号在项目中防止作弊是何其的重要. ...

  6. Oracle常见授权与回收权限(grant和revoke)学习记录

      1.GRANT 赋于权限常用的系统权限集合有以下三个:CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个:ALL ON 数据对象名, ...

  7. 控件UI性能调优 -- SizeChanged不是万能的

    简介 我们在之前的“UWP控件开发——用NuGet包装自己的控件“一文中曾提到XAML的布局系统 和平时使用上的一些问题(重写Measure/Arrange还是使用SizeChanged?),这篇博文 ...

  8. [.net 面向对象程序设计进阶] (8) 托管与非托管

    本节导读:虽然在.NET编程过程中,绝大多数内存垃圾回收由CLR(公共语言运行时)自动回收,但也有很多需要我们编码回收.掌握托管与非托管的基本知识,可以有效避免某些情况下导致的程序异常. 1.什么是托 ...

  9. java提高篇(十九)-----数组之二

    前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面. 三.性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但 ...

  10. 深入探究js中无所不在的this

    黄金守则: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window而当函数被作为某个对象的方法调用时, this等于那个对象. 下面是一些相关实践: --------- ...