ORA-01438: value larger than specified precision allowed for this column
Bir sayı, NUMBER(p,s) kolonu için fazla basamaklı. Ondalık ayraçtan önceki basamakların p eksi s ile sınırlı olduğunu unutmayın. Değeri düzeltin ya da kolonu genişletin.
ORA-01438 ne demek?
NUMBER(p,s) en çok p anlamlı basamak tutar; bunların s tanesi ondalık ayraçtan sonradır. Yani NUMBER(5,2) 99999’a değil, 999,99’a kadar değer alır. Ayraçtan sonraki fazla basamaklar sessizce yuvarlanır, ama ayraçtan önceki fazla basamaklar ORA-01438 verir. Mesaj kolon adını söylemez.
ORA-01438 neden olur?
- Kolonun izin verdiğinden büyük bir değer; örneğin
NUMBER(3)’e 12345. - Ölçeğin etkisini hesaba katmamak:
NUMBER(5,2)ayraçtan önce yalnızca üç basamak bırakır. - Lira yerine kuruş gibi yanlış bir birim ya da bozuk bir girdi.
- Kolonu aşan bir sequence ya da sayaç.
ORA-01438 nasıl çözülür?
- İfadedeki kolonların hassasiyetine ve ölçeğine bakarak kolonu bulun:
USER_TAB_COLUMNS. - Gelen değeri doğrulayın; şaşırtıcı bir sayı çoğu zaman asıl hatadır.
- Değer doğruysa kolonu genişletin:
ALTER TABLE t MODIFY (tutar NUMBER(12,2)).
ORA-01438 örneği
NUMBER(3) en çok üç basamak tutar:
-- ORA-01438: value larger than specified precision allowed for this column
UPDATE products SET stock = 12345 WHERE id = 1; -- stock NUMBER(3)
ALTER TABLE products MODIFY (stock NUMBER(7));
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-12899ORA-01722ORA-06502 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-01438. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.