1. 程式人生 > >Oracle中的替換變數,&變數名,&&變數名

Oracle中的替換變數,&變數名,&&變數名

替換變數(僅用於SQL *Plus或者用於原理和SQL *Plus相同的開發工具):
臨時儲存值
利用它可以達到建立通用指令碼的目的
利用它可以達到和使用者互動,故在SQL *Plus中又稱互動式命令

替換變數的格式式在變數名稱前加一個&,以便在執行SQL命令時提示使用者輸入替換資料,然後按輸入資料執行SQL命令
語法:
(1)& :“&變數名”eg:&name;
生命週期:單次引用中,不需要宣告,如果替換字元或日期型別,最好用單引號擴起
使用範圍:where、order by、列表達式、表名、整個SELECT 語句中

(2)&& :“&&變數名”eg:&&name;


生命週期:整個會話(session連線),不需要宣告

(3)define :“define 變數名=變數值”eg:DEFINE a = clark;
生命週期:整個會話,預先宣告,使用時用&引用宣告的變數
define variable=使用者建立的CHAR型別的值:define 變數名=值;
define 變數名:檢視變數命令。 
undefine 變數名:清除變數
define:檢視在當前會話中所有的替換變數和它們的值

(4)accept

生命週期:整個會話
預先宣告,可以客戶化提示資訊,使用時用&引用宣告的變數。
定義:
accept  變數名name  number/char/date  prompt '提示資訊內容'

即:ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT] format] [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE]
解釋:
PROMPT命令:用於輸出提示使用者的資訊,以便使使用者瞭解指令碼檔案的功能和執行情況
PAUSE命令:用於暫停指令碼檔案的執行
HIDE選項:用於隱藏使用者的輸入,使別人不可見,安全
這條命令的意思是:當plsql程式段執行到變數name的時候,此時需要使用者的互動才能繼續執行下去,plsql程式段會顯示“提示資訊內容”讓使用者輸入相關資訊(如果指定hide選項,那麼在接下去使用者輸入的東西將被用星號顯示出來增加安全,有點像輸入密碼),使用者輸入的內容被接收到並且把它付給name,關於在“提示資訊內容”下使用者輸入的內容的型別,plsql程式段開發人員來通過number/char/date指定,變數name得到正確的值以後,繼續執行相關下面的程式!
例:accept a char prompt '請輸入員工的僱傭時間(yyyy-mm-dd):' hide 
例:accept a char prompt 'input a:' hide

verify:是否給出原值及新值提示。

set verify on/off;

 

例1:
declare
   v_sal number(6,2);
   v_ename emp.ename%type:='&ename';
begin
   select sal into v_sal from emp
where lower(ename)=lower(v_ename);
if v_sal<2000 then
   update emp set sal=v_sal + 200 where lower(ename)=lower(v_ename);
end if;
end;
/

例2:
declare
   v_sal number(6,2);
   v_ename emp.ename%type:='&&ename';
begin
   select sal into v_sal from emp
where lower(ename)=lower(v_ename);
if v_sal<2000 then
   update emp set sal=v_sal + 200 where lower(ename)=lower(v_ename);
end if;
end;
/

在會話中先執行程式2,再次執行程式1,會發現直接PL/SQL procedure successfully completed.
 而不讓我輸入ename,將set verify off也不行
 另一個開啟會話 將set verify off後,每次執行程式1都會讓你輸入ename。
這就是在前面一個會話執行程式2的時候已經將ename,儲存為了會話的變數,而不是plsql程式的變數。