Veri Ambarında (DWH) bazen kaynak tablolardaki sütunların hassasiyeti (precision, duyarlık) artıyor. Örneğin VARCHAR2(20 BYTE)’den, VARCHAR2(30 BYTE)’ye çıkabiliyor. Bu durumda kaynaktan alınan data veri ambarındaki tablolara yazılmak istendiğinde ORA-12899 hatası ile karşılaşılıyor. Bu durumu simüle ettiğim kod aşağıdaki gibidir:
CREATE TABLE tbl_test AS
SELECT CAST(NULL AS VARCHAR2(20 BYTE)) AS clmn
FROM sys.dual;
INSERT INTO tbl_test
SELECT '30 karakterlik string ifademiz' AS clmn
FROM sys.dual;
--ORA-12899: value too large for column "TBL_TEST"."CLMN" (actual: 30, maximum: 20)
2 farklı çözüm yöntemi var. 1 tanesi substr ile insert edilecek tablodaki sütunun maksimum değeri kadar değer alınıp insert edilebilir. Numerik için bu yöntemi önermiyorum. 2. yöntemi yani hedef tablonun ilgili sütununu modify etme yöntemi uygulanmalı.
--çözüm 1:
INSERT INTO tbl_test
SELECT SUBSTR('30 karakterlik string ifademiz',1,20) AS clmn
FROM dual;
--1 row inserted.
ROLLBACK;
--çözüm 2:
ALTER TABLE tbl_test MODIFY clmn varchar2(30);
--Table altered
INSERT INTO tbl_test
SELECT '30 karakterlik string ifademiz' AS clmn
FROM sys.dual;
--1 row inserted.
COMMIT;
Kodların tamamına BURAYA TIKLAYARAK ulaşabilirsiniz.