私の質問には単純な理論的な答えがありますが、それを見つけることはできません。PL/SQLのVALUE_ERROR例外が発生しませんでした。
私はパラメータとしてNUMBERを受け取る手続きを持っています。
create or replace procedure test(p1 number) is
begin
null;
exception
when VALUE_ERROR then
RAISE_APPLICATION_ERROR(-20001, 'value_error');
when others then
RAISE_APPLICATION_ERROR(-20000, 'others');
end;
私はVARCHAR2のPARAMTERで手順を実行しています:それはまたVALUE_ERRORとOTHERS例外持っている私は、エラーメッセージがあることを表示することを期待して...
execute test('a');
を
ORA-20001 value_error
しかし、残念ながら、私が得た:
Error report - ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1 06502. 00000 - "PL/SQL: numeric or value error%s" *Cause: An arithmetic, numeric, string, conversion, or constraint error occurred. For example, this error occurs if an attempt is made to assign the value NULL to a variable declared NOT NULL, or if an attempt is made to assign an integer larger than 99 to a variable declared NUMBER(2). *Action: Change the data, how it is manipulated, or how it is declared so that values do not violate constraints.
誰でもこれを説明することができますか、または、なぜ私が予想されるエラーメッセージを受け取らないのか説明されているリンクを共有できますか?ニコラスは、例外がないプロシージャ内ではなく、それを実行する前にスローされますので、あなたがあなたのメッセージを得ることはありません述べたように
は、非常に多くの
'exception'セクションには決して行きません。数字が期待されるときにプロシージャをコールすると、PL/SQLエンジンはその文字を暗黙的に数値に変換しようとしますが、そうでない場合は例外が発生します。プロシージャは決して実行されません。その例外をトラップする場合は、別のPL/SQLブロック内のプロシージャをコールします。 –
暗黙的な変換を実行できないために例外が発生するため、なぜVALUE_ERRORを発生させないのですか。これは事前定義されていますか? – mikcutu
'VALUE_ERROR' =' ORA-06502 PL/SQL:数値または値のエラー '他に何が見えますか? –