2016-10-09 1 views
0

私のコードが以下の通りである:私はvarchar型の文字列を割り当てるときに、数値変数に例外をキャッチしたい

set serveroutput on;  
declare  
a number(3);  
alta exception;  
pragma exception_init (alta, -06550); 
begin  
a:=&numberl;  
dbms_output.put_line(a);  
exception  
when alta then  
dbms_output.put_line('this is your exception');  
end; 
+0

質問。あなたのコードを実行するとどうなりますか? ORA-06550は、PL/SQLが無効であることを意味します。あなたはこう言っています。このコードが壊れていても、それでもなお動作し、壊れていると伝えます。これはもちろん不可能です。 –

答えて

0

私はあなたの場合はORA-06502

declare  
a number(3);  
alta exception;  
pragma exception_init (alta, -06502); 
begin  
a:=&numberl;  
dbms_output.put_line(a);  
exception  
when alta then  
dbms_output.put_line('this is your exception');  
end; 
+0

数値以外の値を割り当てようとしたときに動作していませんが、以下のコードが期待どおりに動作しています:set serveroutput on; 宣言 番号(3); alta例外。 begin a:= to_number( '&numberl'); dbms_output.put_line(a); 例外 value_errorのとき dbms_output.put_line(これはあなたの例外です); end; –

+0

私はこれを今はテストすることはできませんが、 'a:= '&numberl';'を実行して暗黙の変換を行う必要があると確信しています。あなたは捕まえられない? –

0

をキャッチしたいと思いますVALUE_ERRORをトラップするには、predefined exception

declare 
    a number(3); 
begin 
    a := '&numberl'; 
    dbms_output.put_line(a); 
exception 
    when value_error then 
     dbms_output.put_line('this is your exception'); 
end; 
+0

それは動作しませんでした –

+0

私はこれを今はテストすることはできませんが、 'a:= '&numberl';'を実行してから暗黙の変換を行い、むしろランタイムエラーにするあなたがキャッチすることはできませんコンパイル時のエラーよりも? –

+0

@AlexPoole - あなたは大丈夫です。編集されました。 –

関連する問題