“ORA-01722: invalid number” ilə “ORA-06502: numeric or value error” xətalarının fərqi

Posted on 1 May 2011. Filed under: Oracle, PL/SQL, SQL | Etiketlər: , , , , |

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 🙂

Advertisements
Tam Yazını Oxu | Make a Comment ( 2 so far )

    Haqqında

    Java ilə obyekt yönlü proqramlaşdırma, Java web proqramlaşdırma, Oracle SQL, PL/SQL proqramlaşdırma, optimallaşdırma

    RSS

    Subscribe Via RSS

    • Subscribe with Bloglines
    • Add your feed to Newsburst from CNET News.com
    • Subscribe in Google Reader
    • Add to My Yahoo!
    • Subscribe in NewsGator Online
    • The latest comments to all posts in RSS

    Meta

Liked it here?
Why not try sites on the blogroll...