ORA-12899: value too large for column "SCHEMA"."TABLE"."COLUMN" (actual: N, maximum: M)
Bir değer, kolonun izin verdiğinden uzun. Mesaj gerçek ve en büyük uzunluğu gösterir. Çok baytlı verilerde BYTE olarak boyutlandırılmış bir kolon, metin yeterince kısa görünse bile taşabilir — ğ, ş ve ı gibi Türkçe harfler AL32UTF8’de iki bayttır.
Ne anlama gelir?
Her VARCHAR2 ve CHAR kolonun bayt ya da karakter cinsinden bir azami uzunluğu vardır. Bir INSERT ya da UPDATE bunu aşacaksa Oracle ifadeyi reddeder ve iki uzunluğu da bildirir; örneğin (actual: 23, maximum: 20). Uzunluk BYTE cinsindeyse ve veritabanı karakter kümesi AL32UTF8 ise ASCII dışındaki her karakter iki ya da daha fazla bayt sayılır.
Yaygın nedenler
- Gelen değerin kolondan basitçe uzun olması.
- Çok baytlı karakterlerle bayt uzunluğu:
VARCHAR2(20)20 bayt tutar; bu da 20 karakterden az olabilir. - Tek baytlı bir karakter kümesinden AL32UTF8’e taşınmış veri.
- Girdi uzunluğunu doğrulamayan bir uygulama.
Nasıl çözülür?
- Ne kadar eksik olduğunu görmek için mesajdaki actual ve maximum değerlerini karşılaştırın.
- Kolonu büyütün, tercihen karakter cinsinden:
ALTER TABLE t MODIFY (kolon VARCHAR2(50 CHAR)). - Uzunluğu bayt ve karakter olarak kontrol edin:
LENGTHB(kolon)veLENGTH(kolon). - Sınır bilinçliyse girdiyi uygulamada doğrulayın ya da kısaltın.
Örnek
Bayt ve karakter (AL32UTF8):
SELECT LENGTH('Gümüşhane') AS karakter, LENGTHB('Gümüşhane') AS bayt FROM dual;
-- karakter = 9, bayt = 12
Kolonu karakter cinsinden boyutlandırın:
ALTER TABLE customers MODIFY (city VARCHAR2(50 CHAR));
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-01400ORA-01722 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-12899. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.