天天看點

SQL*Plus中替換變量與定義變量

<b>替換變量</b>

SQL*Plus中的替換變量又叫替代變量,它一般用來臨時存儲相關資料;在SQL語句之間傳遞值。一般使用&amp;或&amp;&amp;字首來指定替換變量. 關于使用替換變量,一般是利用其建立通用的腳本或達到和使用者交換目的。如下所示:

例如,我需要檢視表的相關資訊,如果不使用替換變量,每次查詢我都要修改腳本。非常不便,如果使用替換變量,我們可以将下面腳本存放在tab.sql腳本中,每次運作時,隻需要輸入替換變量的值就可以了。

<a href="http://images.cnitblog.com/blog/73542/201409/112136349027188.png"></a>

如果替換變量為數字類型,那麼可以直接是&amp;+變量名稱,如下所示&amp;DEPTNO,

如果是字元串類型或日期類型,最好使用單引号将其包裹起來,否則在輸入變量值時則必須加上單引号,不那樣做就會報錯,如下所示。

關于替換變量中&amp;與&amp;&amp;的差別,兩者差別在于作用範圍不一樣,&amp;引用的替換變量隻在目前SQL有效,而&amp;&amp;引用的替換變量則在目前會話有效。下面以人們經常引用的例子來說明

小知識1:在存儲過程或包體裡面,經常有在字元串中使用&amp;的情況,執行腳本時,經常會将這些字元串視為替換變量,要求輸入值,這樣煩不甚煩,其實隻需要設定一下SQL*PLUS的環境變量即可避免這種情況。通常通過SET DEFINE OFF

小知識2:如果要顯示SQL*Plus使用替換值替換後的腳本檔案,可以使用SET VERIFY ON/OFF 指令

<b></b> 

<b>使用者定義變量</b>

使用DEFINE定義了的變量(或許我們可以叫其定義常量,和C/C++中的DEFINE非常類似),可以使用&amp;引用聲明的變量。其作用範圍或生命周期通常是整個會話。如果定義了變量後,需要清除變量,則可以使用UNDEFINE清除變量,使用DEFINE VARIABLE來檢視變量

小知識點:檢視目前會話下,SQL*Plus下定義的變量

SQL&gt; define

DEFINE _DATE = "11-SEP-14" (CHAR)

DEFINE _CONNECT_IDENTIFIER = "epps" (CHAR)

DEFINE _USER = "SYS" (CHAR)

DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)

DEFINE _SQLPLUS_RELEASE = "1002000400" (CHAR)

DEFINE _EDITOR = "ed" (CHAR)

DEFINE _O_VERSION = "Oracle Database 10g Release 10.2.0.4.0 - Production" (CHAR)

DEFINE _O_RELEASE = "1002000400" (CHAR)

VARIABLE變量和DEFINE變量不同的是其需要指定變量類型,類似程式設計語言中的強類型和弱類型變量。前者用于綁定變量,後者是用于&amp;或&amp;&amp;進行變量替換

SQL&gt; VAR NUM NUMBER;

SQL&gt; EXEC :NUM :=10;

PL/SQL procedure successfully completed.

SQL&gt; PRINT NUM;

NUM

----------

10

<a href="http://images.cnitblog.com/blog/73542/201409/112136364498916.png"></a>

DECLARE定義變量則一般用于PL/SQL中。一般大家也用得比較多。在此不做說明。

<b>參考資料:</b>

<a href="http://www.doc88.com/p-783671200732.html">http://www.doc88.com/p-783671200732.html</a>

<a href="http://blog.itpub.net/9933980/viewspace-627702/">http://blog.itpub.net/9933980/viewspace-627702/</a>

<a href="http://blog.csdn.net/haiross/article/details/15340489">http://blog.csdn.net/haiross/article/details/15340489</a>