“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🙂

Make a Comment

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

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

%d bloqqer bunu bəyənir: