Oracle hataları

ORA-01427: single-row subquery returns more than one row

Tek satır beklenen alt sorgu birden fazla satır döndürdü

ORA-01427: single-row subquery returns more than one row

Tek bir değer beklenen yerde — =, <, > sonrasında ya da SELECT listesinde — kullanılan bir alt sorgu birden fazla satır döndürdü. IN ya da EXISTS kullanın, alt sorguyu bir toplama fonksiyonuyla toplayın ya da tek satır döndürmesini sağlayın.

Ne anlama gelir?

Skaler bir alt sorgu tek bir değerin yerini tutar. Dış sorgunun herhangi bir satırı için iki ya da daha fazla satır döndürürse Oracle birini seçemez ve ORA-01427 ile durur. İfade bazı verilerle çalışıp bazılarıyla patlayabilir; bu da hatanın rastgele gibi görünmesine yol açar.

Yaygın nedenler

Nasıl çözülür?

  1. Birkaç değerden herhangi biri uygunsa = yerine IN ya da EXISTS kullanın.
  2. Tek bir değer gerekiyorsa toplayın (MAX, MIN) ya da ORDER BY ile birlikte FETCH FIRST 1 ROW ONLY kullanın.
  3. İlişkiyi tamamlayın ki alt sorgu her dış satır için tekil olsun.
  4. Kopyaları bulun: GROUP BY anahtar HAVING COUNT(*) > 1.

Örnek

= yerine IN kullanın:

-- Bir departmanın birden fazla yöneticisi varsa ORA-01427
SELECT * FROM employees
 WHERE manager_id = (SELECT id FROM managers WHERE dept_id = 10);

SELECT * FROM employees
 WHERE manager_id IN (SELECT id FROM managers WHERE dept_id = 10);

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

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