Oracle hataları

ORA-01403: no data found

Veri bulunamadı

ORA-01403: no data found

PL/SQL’de bir SELECT … INTO hiç satır döndürmedi (ya da kod, var olmayan bir associative array öğesini okudu). NO_DATA_FOUND istisnasını yakalayın ya da sorguyu “satır yok” sonucunu normal kabul edecek şekilde yazın.

Ne anlama gelir?

SELECT … INTO tam olarak bir satır döndürmelidir. Sıfır satırda PL/SQL önceden tanımlı NO_DATA_FOUND istisnasını (ORA-01403) fırlatır. Hiç atanmamış bir index-by tablo öğesini okuduğunuzda da aynı hata oluşur. Dikkat: SQL içinden çağrılan bir fonksiyon bu hatayı fırlatırsa SQL ifadesi hata yerine sessizce NULL alır.

Yaygın nedenler

Nasıl çözülür?

  1. “Bulunamadı”nın beklendiği yerde yakalayın: EXCEPTION WHEN NO_DATA_FOUND THEN ….
  2. Ya da hiç oluşmamasını sağlayın: MAX(kolon) gibi bir toplama fonksiyonu her zaman bir satır döndürür (eşleşme yoksa NULL).
  3. Sıfır, bir ya da çok satırın hepsi geçerliyse bir cursor döngüsü kullanın.
  4. Koleksiyonlarda okumadan önce my_table.EXISTS(i) ile kontrol edin.

Örnek

Boş durumu açıkça ele alın:

BEGIN
  SELECT salary INTO l_salary FROM employees WHERE id = p_id;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    l_salary := NULL;
END;

Ya da hiç fırlatmayın:

SELECT MAX(salary) INTO l_salary FROM employees WHERE id = p_id;

SQLlightspeed’de

Bir ifade hata verdiğinde SQLlightspeed’in hata paneli, hata kodunu sade bir Türkçe açıklama ve ne yapmanız gerektiğine dair bir öneriyle; Oracle’ın kendi mesajı ve Oracle dokümantasyonuna bağlantıyla birlikte gösterir — bu hata ve sık görülen onlarca başka hata için.

İlgili hatalar

ORA-01422ORA-06502ORA-01427 Tüm Oracle hataları →

Oracle dokümantasyonu: ORA-01403. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.