替换变量可看作是占位符

一、 单个&符号替换

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. Software Testing Lab1

    Junit和Hamcrest的安装需要先把两个jar文件下载到本地,具体取得方式多种多样,我是直接从同学那要的.新建一个java项目,在新建时直接在库中导入这两个包即可. 这次编程内容是一个测试三角形 ...

  2. MyEclipse 2015 Stable 2.0安装包及破解工具下载

    MyEclipse 2015 Stable 2.0安装包及破解文件下载 之前一直在用myeclipse10.7,后来发现10.7版本有点老了,所以就换了2015稳定版的myeclipse,里面附带了破 ...

  3. eclipse执行上一次结果

    eclipse执行上一次结果,解决方法:Project-clean

  4. 用canvas制作酷炫射击游戏--part3

    今天介绍下 游戏中的sprite模块,也就是构建玩家及怪物的模块.有了这个模块,就可以在咱们的游戏里加入人物了. 想必用过css的朋友都知道sprite,一种将需要加载的图片拼接在一张图里以减少请求的 ...

  5. http://blog.sina.com.cn/s/blog_4c3b6a070100etad.html

    http://blog.sina.com.cn/s/blog_4c3b6a070100etad.html

  6. 微小企业中Sqlserver2000服务器的日常备份与恢复

    1:把数据库和备份分别放在二个硬盘上 2:不要相信用户会使用客户端坚持备份数据,比较靠谱的方法是为数据库建立维护计划 3:数据库采用每天完全备份,并且时间一定要选择在用户肯定开机的时候,因为很多用户晚 ...

  7. 解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)

    解剖SQLSERVER 第十篇  OrcaMDF Studio 发布+ 特性重温(译) http://improve.dk/orcamdf-studio-release-feature-recap/ ...

  8. SQL Server 存储(3/8):理解GAM和SGAM页

    我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时,页会分配给它用来存储数据.GAM(Global Al ...

  9. 前端自动化测试工具doh学习总结(一)

    前言 项目中需要用到前端自动化测试,自己被当作一个探针研究了下目前用的比较多的web自动化测试工具.一开始研究的是的selenium,但由于项目使用了大量的dijit控件,写起testCase来很费劲 ...

  10. 从零开始用gulp

    gulp是基于流的前端构件化工具.目前比较火的前端构建化工具还是挺多的,grunt gulp fis3等等. 这个鬼东西有什么用?请参考https://www.zhihu.com/question/3 ...