2009-05-22 18 views
2

がオラクルのスクリプト例えばオラクルSQLPLUSコマンドライン・質問

のMy Oracleスクリプトtest.sql内を実行するための3つのパラメータを期待から欠落しているコマンドラインパラメータを検出する方法です。このようなインストールプログラムからスクリプトが実行されます sqlplus/NOLOG @ test.sql userid pw tablespace パラメータの1つが見つからない場合、sqlplusはuserinputを要求します。これはインストールプログラムからは認識できません。私は、スクリプト内に欠けているparamを見つけてエラーコードで終了する必要があります。実現可能ですか?

答えて

4

これをsqlplusで直接行う方法はないと思います。 sqlplusの実行は、パラメータをチェックするコマンド/シェル・スクリプトでラップし、検証されたパラメータ・リストを使用してsqlplusをコールすることができます。シェルスクリプトでSQLPLUSの呼び出しをラップ

+0

実際には、スクリプトを呼び出す前に入力パラメータの数を検証するためにinstallを変更します。それは最良の選択肢のようです。 – ipr

4

は、これを行うための最も簡単な方法のように思えるが、あなたはまた、使用してスクリプトを呼び出すことができます。

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

と値のいずれかが同じである場合は、スクリプトの中身をチェック"空の"?そうすれば、パラメータが渡されなくてもスクリプトはハングしません。なぜなら3つのフィラーパラメータが残っているからです。

あなたはこのような何か使用してチェックすることができ

:入力が無効である、戻り値がなければ1になります。(& &の代わり&を使用すると、あなたは一度だけ値の入力を求められます意味)

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; 
/

をどのような有効な値がパラメータであるかを知ることで、どのパラメータが省略されたのかを知ることは困難です。

+0

これは、渡す必要がある値の1つが "空"になるまでうまくいきます。あなたは安全であるためにナンセンスな文字列を選択する必要があり、それは地獄のように醜いです。 –