ORA-01843: Not a valid month
CREATE TABLE DATE_TEST( x date; ); insert into date_test(x) values(to_date('15-JAN-2010', 'DD-MON-YYYY'));
Əgər to_date ilə çevirmə zamanı ORA-01843: Not a valid month xətası ilə qarşılaşsanız, deməli sizin Oracle serverin ölkə və dil xüsusiyyətləri Amerikan deyil, məsələn Rusiya sistemi ilə qurulmuş ola bilər. Belə olan halda yuxarıdakı insert əmrinin səhv olması normaldır, çünki tarix formatındakı MON ay adının qısa 3 hərfli olduğunu göstərir və sizin serverdə ölkə, dil olaraq Amerika, ingilis təyin edilmədiyinə görə problem yaranır.
Bu problemi aradan qaldırmaq üçün TO_DATE funksiyasının fərqli bir versiyasını istifadə edərək tarix formatında istifadə olunan dili göstərmək lazımdır.
insert into date_test(x) values(to_date('15-JAN-2010', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=English'));
Amma daha yaxşı və universal həll yolu isə tarixi DD.MM.YYYY formatında göstərməkdir, bu şəkildə sistemin ölkə və dil xüsusiyyətlərindən asılı olmayaraq dəqiq işləyəcəyinə əmin ola bilərik.
insert into date_test(x) values(to_date('15.01.2010', 'DD.MM.YYYY'));
Ramin cox maraqli idi, tesekkurler.
Men basqa hell yolu teklif edirem.
Yeni bele bir problem cixsa
session bazinda:
alter session set nls_date_format = ‘DD-MM-YYYY’
eger daimi deyismek isteyirsizse
alter system set nls_date_format = ‘DD-MM-YYYY’ scope=spfile
— Instance restart etdikden sonra daimi olacaq.
Ulfat
13 İyul 2010
spfile ilə Oracle instance səviyyəsində olsa, təbii ki daha yaxşı olar, amma Oracle-ı restart eləmək lazımdır deyə bir az çətin məsələdir.
Ramin Orucov
13 İyul 2010