替換變量&和&&

替換變量可看做是佔位符服務器

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
相關文章
相關標籤/搜索