替換變數 和

2021-09-06 17:16:46 字數 4446 閱讀 2094

替換變數可看作是佔位符

一、 單個&符號替換

sql語句中最基本、最普遍元素替換形式是單個&符號替換。&符號是用來在語句中指定替換變數的符號。當執行語句時,oracle伺服器處理語句,發現替換變數,並嘗試用下面兩種方法之一來解析變數的值。首先,它檢查在使用者會話中是否定義了該變數(define命令)。倘若沒有,使用者程序會提示輸入乙個值,這個值會替換變數。

如下所示:

sql>

select ename,sal from emp where empno=&

number

;enter value

fornumber: 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

fornumber: 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 orderby&

col;-->> 第三列即為替換變數enter value

forcol: sal-->> 在這裡,我們既可以選sal,也可以選擇hiredateold

1: select empno,ename,&&col from emp orderby&

colnew

1: select empno,ename,sal from emp order

bysal

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

fornumber: 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

fornumber: 7788

ename sal

---------- ----------

scott 3000

shell中的命令替換和變數替換

可以用 command 也可以用 command 二者是有區別的,先看一下 command 注意 這裡不是引號,而反引號 下面這個是 command 變數替換可以根據變數的狀態 是否為空 是否定義等 來改變它的值,可以使用的變數替換形式 形式說明 變數本來的值 如果變數 var 為空或已被刪除 un...

變數替換擴充套件

變數替換擴充套件 功能表示式 說明使用預設值 var存在且非空,則值為 var 若var未定義或為空值,則值為word,但var的值不變 賦予預設值 var存在且非空,則值為 var 若var未定義或為空值,則值為word,且var被賦值word 非空或未定義報錯 var存在且非空,則值為 var ...

變數替換測試

語法說明 從變數開頭進行規則匹配,將符合最短的資料刪除 從變數開頭進行規則匹配,將符合最長的資料刪除 從變數尾部進行規則匹配,將符合最短的資料刪除 從變數尾部進行規則匹配,將符合最長的資料刪除 變數內容符合舊字串則,第乙個舊字串會被新字串取代 變數內容符合舊字串則,全部的舊字串會被新字串取代 mas...