SELECT…INTO ile NO_DATA_FOUND Hatası
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…


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.
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;
declarei number;
begin
select nvl(1,2)
into i
from dual
where 1=2;
end;
Kolay gelsin…