Oracleスクリプトからコマンドラインパラメータの欠落を検出する方法はありますか
たとえば、私のオラクル スクリプト test.sql は、3 つのパラメーターが実行されることを想定しています。私のスクリプトは、次のようにインストール プログラムから実行されます。インストールプログラムからは認識できません。スクリプト内で不足しているパラメーターを見つけて、エラー コードで終了する必要があります。実現可能ですか?
これを sqlplus で直接行う方法はないと思います。パラメータをチェックするコマンド/シェル スクリプトで sqlplus の実行をラップし、検証済みのパラメータ リストを使用して sqlplus を呼び出すことができます。
シェル スクリプトで sqlplus への呼び出しをラップするのがこれを行う最も簡単な方法のようですが、次を使用してスクリプトを呼び出すこともできます。
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;
/
入力が無効な場合の戻り値は 1 になります。パラメータの有効な値がわからないと、どれが省略されたかを知るのは困難です。