“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 | Tags: , , , , |

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 :)

Make a Comment

Cavab qoy

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

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

RSS Feed for Ramin Orucovun Java və Oracle bloqu Comments RSS Feed

Əla. Təşəkkür.

Dəyməz.


Where's The Comment Form?

    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...

Follow

Get every new post delivered to your Inbox.

Join 26 other followers