|  
  替換變量(僅用于SQL *Plus或者用于原理和SQL *Plus相同的開(kāi)發(fā)工具): 
臨時(shí)存儲(chǔ)值 
利用它可以達(dá)到創(chuàng)建通用腳本的目的 
利用它可以達(dá)到和用戶(hù)交互,故在SQL *Plus中又稱(chēng)交互式命令 
替換變量的格式式在變量名稱(chēng)前加一個(gè)&,以便在運(yùn)行SQL命令時(shí)提示用戶(hù)輸入替換數(shù)據(jù),然后按輸入數(shù)據(jù)運(yùn)行SQL命令 
語(yǔ)法: 
(1)& :“&變量名”eg:&name; 
 
生命周期:?jiǎn)未我弥,不需要聲明,如果替換字符或日期類(lèi)型,最好用單引號(hào)擴(kuò)起 
使用范圍:where、order by、列表達(dá)式、表名、整個(gè)SELECT 語(yǔ)句中
  
(2)&& :“&&變量名”eg:&&name; 
生命周期:整個(gè)會(huì)話(huà)(session連接),不需要聲明 
(3)define :“define 變量名=變量值”eg:DEFINE a = clark; 
生命周期:整個(gè)會(huì)話(huà),預(yù)先聲明,使用時(shí)用&引用聲明的變量 
define variable=用戶(hù)創(chuàng)建的CHAR類(lèi)型的值:define 變量名=值; 
define 變量名:查看變量命令。  
undefine 變量名:清除變量 
define:查看在當(dāng)前會(huì)話(huà)中所有的替換變量和它們的值 
(4)accept 
生命周期:整個(gè)會(huì)話(huà) 
預(yù)先聲明,可以客戶(hù)化提示信息,使用時(shí)用&引用聲明的變量。 
定義: 
accept 變量名name number/char/date prompt '提示信息內(nèi)容'即:ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT] format] [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE] 
解釋?zhuān)?br />
PROMPT命令:用于輸出提示用戶(hù)的信息,以便使用戶(hù)了解腳本文件的功能和運(yùn)行情況 
PAUSE命令:用于暫停腳本文件的運(yùn)行 
HIDE選項(xiàng):用于隱藏用戶(hù)的輸入,使別人不可見(jiàn),安全 
這條命令的意思是:當(dāng)plsql程序段執(zhí)行到變量name的時(shí)候,此時(shí)需要用戶(hù)的交互才能繼續(xù)執(zhí)行下去,plsql程序段會(huì)顯示“提示信息內(nèi)容”讓用戶(hù)輸入相關(guān)信息(如果指定hide選項(xiàng),那么在接下去用戶(hù)輸入的東西將被用星號(hào)顯示出來(lái)增加安全,有點(diǎn)像輸入密碼),用戶(hù)輸入的內(nèi)容被接收到并且把它付給name,關(guān)于在“提示信息內(nèi)容”下用戶(hù)輸入的內(nèi)容的類(lèi)型,plsql程序段開(kāi)發(fā)人員來(lái)通過(guò)number/char/date指定,變量name得到正確的值以后,繼續(xù)執(zhí)行相關(guān)下面的程序! 
例:accept a char prompt '請(qǐng)輸入員工的雇傭時(shí)間(yyyy-mm-dd):' hide  
例:accept a char prompt 'input a:' hide 
verify:是否給出原值及新值提示。 
set verify on/off; 
具體請(qǐng)參看下面的例子: 
plsql程序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;  
 
    -   
 
    - /  
 
 
plsql程序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;  
 
    -   
 
    - /  
 
 
 
secureCRT的一個(gè)會(huì)話(huà)中先執(zhí)行程序2,再次執(zhí)行程序1,會(huì)發(fā)現(xiàn)直接PL/SQL procedure successfully completed. 
而不讓我輸入ename,將set verify off也不行 
另一個(gè)打開(kāi)會(huì)話(huà) 將set verify off后,每次執(zhí)行程序1都會(huì)讓你輸入ename。 
這就是在前面一個(gè)會(huì)話(huà)執(zhí)行程序2的時(shí)候已經(jīng)將ename,保存為了會(huì)話(huà)的變量,而不是plsql程序的變量。  本文出自:億恩科技【www.cmtents.com】 
      
      
		服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] 
       |