この状況で、なぜ例外を発生させるのですか? 実際に例外を発生させる必要があるのは、次の 2 つの状況だけです。
- 例外をキャッチし、呼び出し元のコードで適切に処理するつもりです。
- 何か問題があり、アプリケーションをクラッシュさせて書き込みたいとします。
あなたはこれらのことをしていませんし、する必要もありません。コードの実行を停止し、値を「返す」(これはプロシージャです) だけです。この場合、 を使用することをお勧めしreturn
ます。
return
それを含む無名ブロックの実行を終了し、プロシージャで呼び出し元のステートメントに「制御」を返します。つまり、法案に完全に適合します。
次のコードは、return を使用して、プロシージャの実行を停止する前にパラメーターに割り当てsdate
ます。out
「より多くのもの」は決して発生しません。
create or replace procedure my_procedure_one (returnval in out date) is
begin
-- some stuff.
if sdate > sysdate then
returnval := sdate;
-- we don-t want to continue any more if this is true.
return;
end if;
-- more stuff.
end;
条件が真でない場合にのみ割り当てたいsdate
場合は、これらの 2 行を入れ替えるだけです。より明確にするために、ifステートメントからそれを取り出してください。これは、すべての実行が停止されると、現時点でコードが行うことです。returnval
exec_not_allowed
create or replace procedure my_procedure_two (returnval in out date) is
begin
-- some stuff.
-- we don-t want to continue any more if this is true.
if sdate > sysdate then
return;
end if;
returnval := sdate;
-- more stuff.
end;
どちらの場合でも、Java 呼び出しは同じままです。最初の手順 ( my_procedure_one
) ではsdate
返され、2 番目の手順では null が返さreturnval
れます。