替换变量&和&&
替换变量可看作是占位符
一、 单个&符号替换
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
替换变量&和&&的更多相关文章
- SQL*Plus中替换变量与定义变量
替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...
- SQL:define和verify命令及替换变量&
=================替换变量&===============使用一个&符号来指定一个变量值,执行SQL语句时,会提示用户输入一个数值. SQL> select sa ...
- Spring boot项目maven的profile多环境配置不自动替换变量的问题解决
Spring boot项目maven的profile多环境配置不自动替换变量的问题解决 在网上找了好久,配置都很简单,可是我的程序就是不能自动替换变量,最终单独测试,发现原来是引用spring b ...
- [转载]js正则表达式/replace替换变量方法
原文地址:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html JavaScript正则实战(会根据最近写的不断更新) 1.j ...
- js正则表达式/replace替换变量方法
转自:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html 1. javascript 正则对象替换创建和用法:/patter ...
- JS replace()方法替换变量(可以对变量进行全文替换)
转至:http://blog.sina.com.cn/s/blog_6552200b0102ve60.html 事情是这样的: 我要用 JS 替换一个多行文本的关键字 正常,没有变量的时候应该是这样: ...
- 执行ORACLE SQL时如何 忽略替换变量(转载)
你想在SQL*Plus里执行一个脚本,脚本里包含了一些看起来像替换变量的元素,但实际上你并不是想把它们当替换变量来处理.这时你想让解析器忽略它们而不是提示用户输入.解决方案1有一种解决方案就是在&am ...
- vim正则表达式的替换变量
在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1.\2 等变量来访问 \( 和 \) 中的内容. 例如有下列英汉对照文本: adapter 适配器address 地址alge ...
- 【RMAN】RMAN脚本中使用替换变量
[RMAN]RMAN脚本中使用替换变量--windows 下rman全备脚本 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...
随机推荐
- C++函数返回局部指针变量
遇到过好几次关于函数返回指针变量问题,有时候是可以的,有时候是不可以的,然后就混乱了.今天研究了下,结果发现原来和内存分配有关. 用下面的例子分析下吧: char * test() { char a[ ...
- (原创)巩固理解基于DS18B20的1-wire协议(MCU,经验)
1.Abstract 如前篇随笔所写,将以前遇到最难懂的两个部分重拾一下.前一篇写的是I2C协议(http://www.cnblogs.com/hechengfei/p/4117840.htm ...
- NFS挂载操作指南
NFS 全称 network file system,其功能是实现将某台服务器的某个目录下资源共享给其他服务器.被共享的服务器作为nfs服务端,需要开启和配置nfs server服务.共享他人资源的服 ...
- 问题:无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)
无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用) 问题: 运行程序更新时出现报错: 无法获得锁 /var/lib/dpkg/lock - open (11: ...
- SSIS oracle 64位 数据源链接
新建数据源 提供程序选择:本机OLE DB ORACLE Provider For OLE DB 服务器名或文件名中选择Oracle Net Manager中配置好的服务名即可 填写账号,密码,测试, ...
- lxc on centos
终于把lxc的网络配通了,也不知道对不对,记一下 一开始都是雷同的地方 yum install libcgroup lxc lxc-templates 安装lxc cgroup 然后记得 chkcon ...
- On One Side Kolmogorov Type Inequalities
Let \(X_1,X_2,\ldots,X_n\) be independent random variables. Denote \[S_n=\sum_{i=1}^n X_i.\] The we ...
- 软将工程课设day1与day2
在稍迟的时候,收集了三份用户体验,自己编辑整理之后上交于组. 和老师确定了一下每日的工作流程与需要提交的任务. 与组讨论了软件优化方向,包括整理收集到的“反馈信息”.“额外需求信息”.“体验信息”.
- 解读jQuery中extend函数
$.extend.apply( null, [ true, { "a" : 1, "b" : 2 } ] );//console.log(window.a); ...
- python _、__和__xx__的区别
python _.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家.英文原文地址:Difference between _, __ and __xx__ in Pytho ...