Oracle hataları

ORA-01722: invalid number

Geçersiz sayı — metin sayıya çevrilemedi

ORA-01722: invalid number

Oracle bir karakter değerini sayıya çevirmeye çalıştı ve metin geçerli bir sayı değildi. Çoğunlukla bir VARCHAR2 kolon bir sayıyla karşılaştırılıyordur; bu yüzden tablodaki tek bir hatalı satır bütün sorguyu bozar.

Ne anlama gelir?

Bir ifadede metin ile sayı karşılaştığında Oracle metni sayıya çevirir. Değerlerden biri sayısal değilse — harfler, yanlış yerde boşluk, oturumun nokta beklediği yerde virgül — dönüşüm ORA-01722 ile başarısız olur. Satırların ve koşulların değerlendirilme sırası yürütme planıyla değişebildiği için bir sorgu aylarca çalışıp sonra patlayabilir.

Yaygın nedenler

Nasıl çözülür?

  1. Aynı türleri karşılaştırın: kolon metinse WHERE kod = '123'.
  2. Hatalı değerleri bulun: WHERE VALIDATE_CONVERSION(kolon AS NUMBER) = 0 (Oracle 12.2 ve sonrası).
  3. Güvenli çevirin: TO_NUMBER(kolon DEFAULT NULL ON CONVERSION ERROR) (12.2 ve sonrası).
  4. Çevirirken biçimi açıkça belirtin: TO_NUMBER('1,5', '9D9', 'NLS_NUMERIC_CHARACTERS='',.''').

Örnek

Sayı olmayan satırları bulun (12.2 ve sonrası):

SELECT id, code
  FROM products
 WHERE VALIDATE_CONVERSION(code AS NUMBER) = 0;

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

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