Mevlüt Becerikli

Basit diye bir ÅŸey yok !!! Bilmeyene 2+2 bile zor…

SELECT…INTO ile NO_DATA_FOUND Hatası

Yazan: Mevlüt Becerikli Tarih: Oca 3rd, 2010 | Kategori:: Oracle, PL/SQL, Veritabanı

Bazen SQL ifadelerimizin sonucunda bir kayıt dönmeyebilir. Biz de SELECT… INTO ifadesini kullanırsak o zaman bu bizim başımıza biraz sorun açabilir. Bu hatayı kontrol etmek de çok bilndik bir ÅŸey ama kayıt altına alalım;

BEGIN

SELECT empno INTO v_empno FROM emp WHERE ename = ‘MEVLUT’;

EXCEPTION
WHEN no_data_found THEN

<<Burda istediÄŸiniz iÅŸlemi yapabilirsiniz>>

END;

Bir diğer yöntem de NVL fonksiyonunu kullanarak, kayıt dönmemesi halinde DEFAULT bir değer de atayabiliriz;

SELECT NVL(empno,0) INTO v_empno FROM emp WHERE ename = ‘MEVLUT‘;

Bu ifade yanlıştır. Çünkü bir kayıt dönmüyorsa uygulanacak veri (NULL bile olsa) olmayacaktır.
Zira bende anlık bir dalgınlık ile bu hataya düşmüştüm. Ama sevgili okurlarımızın desteği ile bunu da düzelttik.  Nasıl mı ???

Aşağıdaki yorumlarda arkadaşlar güzelce açıklamışlar.
TeÅŸekkür ederim…

İyi Çalışmalar…



2 Yorum Yapilmis » “SELECT…INTO ile NO_DATA_FOUND Hatası”

  1. SELECT NVL(empno,0) INTO v_empno FROM emp WHERE ename = ‘MEVLUT‘; bu kısım yanlış olmuş.Bu şekilde yazarsanız yine NO_DATA_FOUND alırsınız.

    SELECT NVL(SELECT empno FROM emp WHERE ename = ‘MEVLUT‘,0) FROM DUAL; bu şekilde olursa istenilen sonuç döner.

  2. Bir diğer yöntem de NVL fonksiyonunu kullanarak, kayıt dönmemesi halinde DEFAULT bir değer de atayabiliriz;

    SELECT NVL(empno,0) INTO v_empno FROM emp WHERE ename = ‘MEVLUT‘;

    Bu ifadeniz yanlış ya da ben yanlış anlıyorum. Select query’nizden hiçbir row dönmezse nvl uygulayabileceÄŸiniz bir deÄŸer de yok demektir, yani bu ÅŸekilde default deÄŸer atayamazsınız, sizin önderdiÄŸiniz çözümde yine no_data_found exception’ı oluÅŸacaktır.

    Örnek olarak sizin yazdığınıza göre 2 döndürmesi gereken şu kod exception raise edecektir;

    declare
    i number;
    begin
    select nvl(1,2)
    into i
    from dual
    where 1=2;
    end;

    Kolay gelsin…

Yorum Yapin