利用替換變量提高Oracle交互性
想要提高Oracle交互性,通過定義與使用替換變量就可以實(shí)現(xiàn)了,下面就為您詳細(xì)介紹利用替換變量提高Oracle交互性的方法,供您參考。
一、定義與使用替換變量。
在Oracle提供的相關(guān)工具中,如SQL PLUS管理平臺(tái)中,允許數(shù)據(jù)庫管理員采用替換變量來提高SQL語句的靈活性。替換變量的定義跟普通變量的定義類似,只需要在變量名前面加入&符號(hào)即可。如上面例子中的“&name_filed”就表示一個(gè)替換變量。當(dāng)運(yùn)行一段有替換變量的SQL語句時(shí),數(shù)據(jù)庫系統(tǒng)會(huì)自動(dòng)提醒用戶要輸入哪些變量值。
如在如下這條語句中,&name_filed表示用戶想要顯示的字段值。若用戶想要顯示某個(gè)表中的多個(gè)字段的話,則可以在這里定義多個(gè)替換變量。而條件語句中的'&NAME'則表示一個(gè)限制條件,或者說一個(gè)查詢參數(shù)。這條語句的大意就是用戶輸入員工的名字,然后讓系統(tǒng)查詢出用戶想了解的信息,如用戶的身份證號(hào)碼等等。
SQL> select &name_filed from dtmfg.ad_user t where t.name like '&NAME';
細(xì)心的讀者或許會(huì)發(fā)現(xiàn),在查詢條件中的替換變量,為什么要用單引號(hào)括起來呢?這是因?yàn)?,我們在寫SQL語句的時(shí)候,若字段時(shí)字符型的話,就需要用單引號(hào)括起來。所以,在定義替換變量的時(shí)候,跟平時(shí)寫SQL語句類型。若數(shù)據(jù)類型是字符或者日期型的,則需要在定義替換變量的時(shí)候,用單引行括起來。否則的話,在用戶執(zhí)行這條語句、輸入變量的時(shí)候,每次都需要把括號(hào)添加進(jìn)去。那就非常的麻煩。相比起來,還不如在定義這條SQL語句的時(shí)候,就加入單引號(hào)。如此,在輸入對(duì)應(yīng)值的時(shí)候,就不用用單引號(hào)括起來了,可以直接輸入。
另外,替換變量不但在Select語句中可以使用,在Update等語句中也可以普遍應(yīng)用。
二、定義默認(rèn)值。
有時(shí)候,對(duì)于替換變量我們可能會(huì)有默認(rèn)值。如果數(shù)據(jù)庫管理員已經(jīng)知道替換變量的具體值,又想避免運(yùn)行腳本文件時(shí)反復(fù)出現(xiàn),則可以給替換變量定義一個(gè)默認(rèn)值。在SQL Plus平臺(tái)中,數(shù)據(jù)庫管理員可以利用Define命令來定義替換變量的默認(rèn)值。
在定義替換變量默認(rèn)值的時(shí)候,需要注意幾個(gè)問題。
一是要合理使用單引號(hào)。該用單引號(hào)括起來的,就要使用單引號(hào);不需要用的時(shí)候,堅(jiān)決不用。否則的話,會(huì)造成SQL語句的運(yùn)行錯(cuò)誤。那么什么時(shí)候該用單引號(hào)呢?這主要是根據(jù)SQL語句來的。平時(shí)在寫SQL語句的過程中要用到單引號(hào)的,則在定義默認(rèn)值的時(shí)候,也要用單引號(hào)括起來。如果平時(shí)不用的話,則就可以不用。如在定義字段名稱的默認(rèn)值時(shí),就不需要用單引號(hào)括起來。畫蛇添足,反而會(huì)導(dǎo)致SQL語句的執(zhí)行錯(cuò)誤二是這只是定義了一個(gè)默認(rèn)值。當(dāng)定義來一個(gè)默認(rèn)值之后,系統(tǒng)就不會(huì)提示用戶輸入相關(guān)的參數(shù),而直接采用默認(rèn)值。如在上面這個(gè)例子中,若利用define NAME='SuperUser'這條語句定義了NAME的默認(rèn)值之后,在執(zhí)行這條Select語句的時(shí)候,就不會(huì)再提示用戶輸入NAME值。我們可以利用Define命令來查看當(dāng)前環(huán)境中所有的可替換變量的值。也可以利用Define NAME來查看可替換變量NAME的默認(rèn)值。
三是若用戶采用的是腳本文件的話,則可以直接把這個(gè)定義默認(rèn)值的語句放在腳本文件的一開始。如此的話,這個(gè)默認(rèn)值的定義就會(huì)隨著腳本文件而走。用戶不用每次使用腳本文件的時(shí)候,都先去定義默認(rèn)值。這個(gè)這個(gè)默認(rèn)值的作用域只是適用于當(dāng)前的會(huì)話。當(dāng)數(shù)據(jù)庫管理員結(jié)束當(dāng)前的會(huì)話后,這個(gè)變量的默認(rèn)值也就失效了。為了在下次重新會(huì)話的時(shí)候,仍然可以利用這個(gè)默認(rèn)值,故在腳本文件一開始定義可替換變量的默認(rèn)值,也是非常有必要的。
四是利用Define命令來定義可替換變量的時(shí)候,有一個(gè)限制條件。即可替換變量必須是字符型的數(shù)據(jù)。若用戶想定義的可替換變量是數(shù)字型的,如員工的薪水,此時(shí),就需要采用ACCEPT命令。否則的話,就是一個(gè)無效的默認(rèn)值。
若我們有時(shí)候不需要這個(gè)默認(rèn)值,需要取消他,改如何處理呢?此時(shí),我們就可以利用undefine命令,來取消某個(gè)替換變量的默認(rèn)值。當(dāng)然,我們也可以利用Define命令來給某個(gè)替換變量設(shè)置一個(gè)新的值。在實(shí)際工作中,可能還是直接采用Define命令來為其設(shè)置一個(gè)默認(rèn)值來的方便。
三、測試完畢后,保存為腳本文件。
為了增強(qiáng)這個(gè)SQL語句的可重用性,我們往往會(huì)把寫好的SQL語句保存為腳本文件。如此的話,下次需要用到的時(shí)候,直接執(zhí)行這個(gè)腳本語句即可。在保存的時(shí)候,為了有更好的可讀性,筆者有一些小小的建議。
一是最好在腳本文件的開頭,注釋一些這條語句的具體用途。俗話說,好記性不如爛筆頭。在幾個(gè)月后,很難確保你還記得這條語句的用途。
二是給可替換變量取一些比較直觀的名字。否則的話,當(dāng)使用數(shù)據(jù)庫管理員可能直接都不知道某個(gè)替換變量所代表的含義。另外,列的替換變量跟查詢語句中的替換變量最好進(jìn)行區(qū)分,如可以利用前綴進(jìn)行區(qū)別。如此做的話,這個(gè)語句的可閱讀性就會(huì)增強(qiáng)。
三是可利用Prompt命令來輸出一些提示信息。在編寫替換變量的時(shí)候,要像編寫其他程序一樣,養(yǎng)成為每個(gè)可替換變量做好注釋的習(xí)慣。這時(shí)作為數(shù)據(jù)庫管理員一個(gè)必備的技能之一。
四、其他解決方案。
針對(duì)Oracle數(shù)據(jù)庫交互性而言,它還提供了一些其他的解決方案。
如利用ACCEPT、PAUSE、PROMPT三個(gè)命令結(jié)合使用提供一個(gè)模擬的用戶輸入界面。ACCEPT命令可以讓數(shù)據(jù)庫管理員指定替換變量的類型。因?yàn)镈efine定義替換變量默認(rèn)值的時(shí)候,只能夠接受字符型數(shù)據(jù)的默認(rèn)值。若是其他數(shù)據(jù)類型的默認(rèn)值的話,就要用ACCEPT來定義。而PAUSE顧名思義,可以讓腳本語句暫時(shí)運(yùn)行,以提供一個(gè)更加友好的用戶界面。如可以讓用戶通過輸入回車鍵來執(zhí)行剩下的腳本語句等等。如此,就給用戶一個(gè)“喘息”核對(duì)數(shù)據(jù)的機(jī)會(huì)。
如可以通過綁定變量的方式,來實(shí)現(xiàn)替換變量的功能。綁定變量只在當(dāng)前會(huì)話中存在,同名的綁定變量一最后一個(gè)定義為準(zhǔn)。綁定變量在賦值的時(shí)候,比較麻煩,需要采用Excute命令來給綁定變量進(jìn)行賦值。所以,在實(shí)際應(yīng)用中,不是很廣泛。
【編輯推薦】























