替换变量可看作是占位符

一、 单个&符号替换

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. MFC程序中使用调试宏ASSERT()、ASSERT_VALID()、VERIFY()和TRACE()的区别

    其实这篇文章说的很明白了:http://dev.gameres.com/Program/Other/DebugMacro.htm 结论如下: 1.ASSERT()测试它的参数,若参数为0,则中断执行并 ...

  2. 解决ViewPage中嵌套有ListView或者滑动手势等造成滑动的冲突

    public class ViewPagerCompat extends ViewPager { //mViewTouchMode表示ViewPager是否全权控制滑动事件,默认为false,即不控制 ...

  3. java解析xml

    一.Document对象相关   1.读取XML文件,获得document对象.             SAXReader reader = new SAXReader();             ...

  4. 查询指定网段可用IP脚本

    1.脚本内容: #vi hhh 添加以下内容: #!/bin/bash read -p "Please keyin the network segment: (e.g. 10.88.1) & ...

  5. Hadoop伪分布搭建

    一.伪分布式的搭建 1.准备Linux环境 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改 ...

  6. ABP框架详解(三)Domain

    此处的Domain主要指Abp类库根目录下Domain文件夹.顾名思义该目录下是用来存放与领域实体,领域逻辑执行,存储,领域服务相关的内容. 1.Entities (1)为整个Abp框架后期开发的所有 ...

  7. Windows服务器安全加固实战(Windows Server 2008 R2和Windows Server 2012)

    最近我们立方技术工作室在使用阿里云的过程中,发现服务器安全性也不是很高,而服务端的安全软件都很贵.为了为朋友们提供更加有效的解决方案,我们决定身体力行,高筑墙,大幅度提升服务器的安全防护级别! 主机安 ...

  8. javascript opacity兼容性随笔

    一.CSS兼容代码 .transparent { filter:alpha(opacity=50); /* IE */ -moz-opacity:0.5; /* FireFox old version ...

  9. 酷狗 KRC 文件的解析

    清理硬盘发现以前写过一个进行一半的代码,这次补全并从硬盘删掉. 格式说明来自 https://shansing.com/read/392/ krc解码并解压缩后得到一个字符串,例子: [id:$000 ...

  10. loadrunner agent 中删除失效的mmdrv进程

     源码: using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; us ...