“ORA-01722: invalid number” ilə “ORA-06502: numeric or value error” xətalarının fərqi
Aşağıdakı kodlara baxıb baş verəcək Oracle xətasını müəyyənləşdirməyə çalışın.
-- Nümunə kod 1 select to_number('123a') from dual
-- Nümunə kod 2 declare l_number number; begin select to_number('123a') into l_number from dual; dbms_output.put_line(l_number); end;
-- Nümunə kod 3 declare l_number number; begin l_number := to_number('123a'); dbms_output.put_line(l_number); end;
Nümunə kod 1-də ORA-01722: invalid number xətası çıxacaq.
Nümunə kod 2-də ORA-01722: invalid number xətası çıxacaq.
Nümunə kod 3-də ORA-06502: PL/SQL: numeric or value error: character to number conversion error xətası çıxacaq.
Yuxarıdakı nümunə kodlardan göründüyü kimi “ORA-01722: invalid number” xətası SQL sorğusunda baş verir, bu SQL sorğusu PL/SQL proqramında da ola bilər(nümunə 2-də olduğu kimi).
“ORA-06502: numeric or value error” xətası isə ancaq PL/SQL proqramında baş verir.
Məntiqi olaraq bunların hər ikisi eyni xəta olsa da xətanın baş vermə yerinə görə(SQL və ya PL/SQL context) Oracle onlara ayrı xəta kodları və mesajı vermişdir. Buna görə də diqqətli olub PL/SQL proqramının exception handler kodlarında bu nüansı nəzərə almaq lazımdır.
Yuxarıdakı nümunə 2 və 3-də verilmiş PL/SQL kodlarını düzgün exception handler ilə aşağıdakı kimi olmalıdır:
-- Nümunə kod 2 declare l_number number; begin select to_number('123a') into l_number from dual; dbms_output.put_line(l_number); exception when INVALID_NUMBER then dbms_output.put_line('SQL invalid number error ' || dbms_utility.format_error_backtrace); dbms_output.put_line('SQL invalid number error ' || dbms_utility.format_error_stack); end;
-- Nümunə kod 3 declare l_number number; begin l_number := to_number('123a'); dbms_output.put_line(l_number); exception when VALUE_ERROR then dbms_output.put_line('PL/SQL value error ' || dbms_utility.format_error_backtrace); dbms_output.put_line('PL/SQL value error ' || dbms_utility.format_error_stack); end;
Ümid edirəm ki, aydın oldu. Happy PL/SQL development 🙂
Read Full Post | Make a Comment ( 2 so far )