ORA-06502: PL/SQL: numeric or value error
Bir PL/SQL ataması ya da dönüşümü başarısız oldu: çoğunlukla bir metin, değişkenin tutabileceğinden uzundur (character string buffer too small), bir metin sayıya çevrilemez ya da NOT NULL bir değişkene NULL atanmıştır.
Ne anlama gelir?
ORA-06502, PL/SQL’in sığmayan değerler için genel hatasıdır. İki noktadan sonraki metin türünü söyler: character string buffer too small, character to number conversion error, number precision too large ya da NULL index table key value. Ardından gelen ORA-06512 satırları kodun tam satırını gösterir.
Yaygın nedenler
- Kendisine atanan değerden küçük tanımlanmış bir
VARCHAR2(n)değişken. - Çok baytlı karakterler: BYTE olarak tanımlanan bir değişken karakter sayısından fazla bayt ister (ğ, ş, ı gibi Türkçe harfler AL32UTF8’de 2 bayttır).
- Sayı olmayan bir metni sayıya çevirmek.
- Bir
NUMBER(p,s)değişken için fazla büyük bir sayı.
Nasıl çözülür?
- İfadeyi bulmak için ORA-06512 satır numaralarını okuyun.
- Değişkenleri kolon tipinden tanımlayın:
l_ad employees.name%TYPE. - Çok baytlı karakter içerebilecek metinler için karakter uzunluğu kullanın:
VARCHAR2(100 CHAR). - Girdiyi atamadan önce doğrulayın ya da dönüştürün.
Örnek
Değişkeni kolondan boyutlandırın:
DECLARE
l_name employees.last_name%TYPE; -- VARCHAR2(20) değil
BEGIN
SELECT last_name INTO l_name FROM employees WHERE id = 1;
END;
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-01403 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-06502. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.