利用替換變數提高Oracle互動性(define)

2021-06-22 00:21:18 字數 2505 閱讀 6664

想要提高oracle互動性,通過定義與使用替換變數就可以實現了,下面就為您詳細介紹利用替換變數提高oracle互動性的方法,供您參考。

一、定義與使用替換變數。

在oracle提供的相關工具中,如sql plus管理平台中,允許資料庫管理員採用替換變數來提高sql語句的靈活性。替換變數的定義跟普通變數的定義類似,只需要在變數名前面加入&符號即可。如上面例子中的「&name_filed」就表示乙個替換變數。當執行一段有替換變數的sql語句時,資料庫系統會自動提醒使用者要輸入哪些變數值。

sql> select &name_filed from dtmfg.ad_user t where t.name like '&name';

細心的讀者或許會發現,在查詢條件中的替換變數,為什麼要用單引號括起來呢?這是因為,我們在寫sql語句的時候,若字段時字元型的話,就需要用單引號括起來。所以,在定義替換變數的時候,跟平時寫sql語句型別。若資料型別是字元或者日期型的,則需要在定義替換變數的時候,用單引行括起來。否則的話,在使用者執行這條語句、輸入變數的時候,每次都需要把括號新增進去。那就非常的麻煩。相比起來,還不如在定義這條sql語句的時候,就加入單引號。如此,在輸入對應值的時候,就不用用單引號括起來了,可以直接輸入。

另外,替換變數不但在select語句中可以使用,在update等語句中也可以普遍應用。

二、定義預設值。

有時候,對於替換變數我們可能會有預設值。如果資料庫管理員已經知道替換變數的具體值,又想避免執行指令碼檔案時反覆出現,則可以給替換變數定義乙個預設值。在sql plus平台中,資料庫管理員可以利用define命令來定義替換變數的預設值。

在定義替換變數預設值的時候,需要注意幾個問題。

一是要合理使用單引號。該用單引號括起來的,就要使用單引號;不需要用的時候,堅決不用。否則的話,會造成sql語句的執行錯誤。那麼什麼時候該用單引號呢?這主要是根據sql語句來的。平時在寫sql語句的過程中要用到單引號的,則在定義預設值的時候,也要用單引號括起來。如果平時不用的話,則就可以不用。如在定義欄位名稱的預設值時,就不需要用單引號括起來。畫蛇添足,反而會導致sql語句的執行錯誤

二是這只是定義了乙個預設值。當定義來乙個預設值之後,系統就不會提示使用者輸入相關的引數,而直接採用預設值。如在上面這個例子中,若利用define name='superuser'這條語句定義了name的預設值之後,在執行這條select語句的時候,就不會再提示使用者輸入name值。我們可以利用define命令來檢視當前環境中所有的可替換變數的值。也可以利用define name來檢視可替換變數name的預設值。

三是若使用者採用的是指令碼檔案的話,則可以直接把這個定義預設值的語句放在指令碼檔案的一開始。如此的話,這個預設值的定義就會隨著指令碼檔案而走。使用者不用每次使用指令碼檔案的時候,都先去定義預設值。這個這個預設值的作用域只是適用於當前的會話。當資料庫管理員結束當前的會話後,這個變數的預設值也就失效了。為了在下次重新會話的時候,仍然可以利用這個預設值,故在指令碼檔案一開始定義可替換變數的預設值,也是非常有必要的。

四是利用define命令來定義可替換變數的時候,有乙個限制條件。即可替換變數必須是字元型的資料。若使用者想定義的可替換變數是數字型的,如員工的薪水,此時,就需要採用accept命令。否則的話,就是乙個無效的預設值。

若我們有時候不需要這個預設值,需要取消他,改如何處理呢?此時,我們就可以利用undefine命令,來取消某個替換變數的預設值。當然,我們也可以利用define命令來給某個替換變數設定乙個新的值。在實際工作中,可能還是直接採用define命令來為其設定乙個預設值來的方便。

三、測試完畢後,儲存為指令碼檔案。

為了增強這個sql語句的可重用性,我們往往會把寫好的sql語句儲存為指令碼檔案。如此的話,下次需要用到的時候,直接執行這個指令碼語句即可。在儲存的時候,為了有更好的可讀性,筆者有一些小小的建議。

一是最好在指令碼檔案的開頭,注釋一些這條語句的具體用途。俗話說,好記性不如爛筆頭。在幾個月後,很難確保你還記得這條語句的用途。

二是給可替換變數取一些比較直觀的名字。否則的話,當使用資料庫管理員可能直接都不知道某個替換變數所代表的含義。另外,列的替換變數跟查詢語句中的替換變數最好進行區分,如可以利用字首進行區別。如此做的話,這個語句的可閱讀性就會增強。

三是可利用prompt命令來輸出一些提示資訊。在編寫替換變數的時候,要像編寫其他程式一樣,養成為每個可替換變數做好注釋的習慣。這時作為資料庫管理員乙個必備的技能之一。

四、其他解決方案。

針對oracle資料庫互動性而言,它還提供了一些其他的解決方案。

如利用accept、pause、prompt三個命令結合使用提供乙個模擬的使用者輸入介面。accept命令可以讓資料庫管理員指定替換變數的型別。因為define定義替換變數預設值的時候,只能夠接受字元型資料的預設值。若是其他資料型別的預設值的話,就要用accept來定義。而pause顧名思義,可以讓指令碼語句暫時執行,以提供乙個更加友好的使用者介面。如可以讓使用者通過輸入回車鍵來執行剩下的指令碼語句等等。如此,就給使用者乙個「喘息」核對資料的機會。

如可以通過繫結變數的方式,來實現替換變數的功能。繫結變數只在當前會話中存在,同名的繫結變數一最後乙個定義為準。繫結變數在賦值的時候,比較麻煩,需要採用excute命令來給繫結變數進行賦值。所以,在實際應用中,不是很廣泛。

利用Oracle執行計畫機制提高查詢效能

消耗在準備利用oracle執行計畫機制提高查詢效能新的sql語句的時間是oracle sql語句執行時間的最重要的組成部分。但是通過理解oracle內部產生執行計畫的機制,你能夠控制oracle花費在評估連線順序的時間數量,並且能在大體上提高查詢效能。準備執行sql語句 當sql語句進入oracle...

利用Oracle執行計畫機制提高查詢效能

消耗在準備利用oracle執行計畫機制提高查詢效能新的sql語句的時間是oracle sql語句執行時間的最重要的組成部分。但是通過理解oracle內部產生執行計畫的機制,你能夠控制oracle花費在評估連線順序的時間數量,並且能在大體上提高查詢效能。準備執行sql語句 當sql語句進入oracle...

利用Oracle執行計畫機制提高查詢效能

消耗在準備利用oracle執行計畫機制提高查詢效能新的sql語句的時間是oracle sql語句執行時間的最重要的組成部分。但是通過理解oracle內部產生執行計畫的機制,你能夠控制oracle花費在評估連線順序的時間數量,並且能在大體上提高查詢效能。準備執行sql語句 當sql語句進入oracle...