Oracle hataları

ORA-01422: exact fetch returns more than requested number of rows

SELECT INTO birden fazla satır döndürdü

ORA-01422: exact fetch returns more than requested number of rows

PL/SQL’de bir SELECT … INTO birden fazla satır döndürdü. WHERE koşulunu tekil hale getirin, bir satırı bilerek seçin ya da bir koleksiyona veya döngüye alın.

Ne anlama gelir?

Skaler değişkenlere yapılan SELECT … INTO yalnızca bir satır taşıyabilir. Sorgu iki ya da daha fazla satır döndürdüğünde PL/SQL önceden tanımlı TOO_MANY_ROWS istisnasını (ORA-01422) fırlatır. Çoğunlukla veri değişikliklerinin daha önce tekil olan bir aramayı belirsiz hale getirmesinden sonra ortaya çıkar.

Yaygın nedenler

Nasıl çözülür?

  1. Tekil ya da birincil anahtar üzerinden filtreleyin.
  2. Birden fazla satır geçerliyse birini bilerek seçin: ORDER BY … FETCH FIRST 1 ROW ONLY (12c ve sonrası).
  3. Tüm satırlara ihtiyacınız varsa BULK COLLECT INTO ile bir koleksiyona ya da bir cursor döngüsüne alın.
  4. Kopyaların hiç olmaması gerekiyorsa tekil bir kısıt ekleyin.

Örnek

En son satırı bilerek seçin (12c ve sonrası):

SELECT status INTO l_status
  FROM order_history
 WHERE order_id = p_id
 ORDER BY changed_at DESC
 FETCH FIRST 1 ROW ONLY;

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-01403ORA-01427ORA-06502 Tüm Oracle hataları →

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