2009-05-22 127 views
2

是否有從Oracle腳本甲骨文的sqlplus命令行問題

例如我的Oracle腳本TEST.SQL預計3個參數來運行檢測缺少的命令行參數的方式。我的腳本是從這樣的安裝程序執行的 sqlplus/NOLOG @ test.sql userid pw tablespace 當其中一個參數丟失時,sqlplus會提示userinput。這不能從安裝程序中識別。我需要在腳本中找到缺少的參數,並用錯誤代碼退出。這可行嗎?

回答

4

我不認爲有辦法直接與sqlplus做到這一點。您可以將sqlplus執行包裝在檢查參數的命令/ shell腳本中,然後使用驗證的參數列表調用sqlplus。

+0

實際上,我們修改安裝以在調用腳本之前驗證輸入參數的數量。這似乎是最好的選擇.. – ipr 2009-05-22 22:05:57

4

結束語該呼叫並在shell腳本在sqlplus好像要做到這一點最簡單的方法,但是否也能使用調用腳本:

sqlplus /NOLOG @test.sql <userid> <pw> <tablespace> empty empty empty 

,並檢查腳本中如果任何值等於「空」?這樣,即使沒有參數通過,腳本也不會掛起,因爲您仍然有三個填充參數。

你可以檢查使用這樣的事情:(使用& &,而不是&意味着你只會提示輸入值一次)

var status number; 
set verify on 
whenever sqlerror exit 1; 
begin 
    :status := 0; 
    select decode('&&1','empty',1,:status) into :status from dual; 
    select decode('&&2','empty',2,:status) into :status from dual; 
    select decode('&&3','empty',3,:status) into :status from dual; 
    IF :status != 0 THEN 
    RAISE_APPLICATION_ERROR (
    -20000+-1*:status,'parameter '|| :status || ' is missing'); 
    END IF; 
end; 
/

當輸入無效,將是1沒有返回值知道參數的有效值是什麼,很難知道哪一個被省略。

+0

這工作得很好,直到你需要通過的值之一是「空的」。你必須選擇一個無意義的字符串以保證安全,並且它很醜陋。 – 2014-02-12 16:57:40