替换变量&和&&

替换变量可看做是占位符服务器

1、 单个&符号替换oracle

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

       以下所示:rest

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

2、&&符号替换code

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

      以下所示:blog

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

3、替换列名进程

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

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
 ...

4、 替换表达式和文本变量

      在运行时几乎能够替换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

5、 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选项会把替换字符重修修改成&。

6、 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
相关文章
相关标签/搜索