Kecuali Anda memiliki pemicu di tabel yang menyetel kolom tanggal atau stempel waktu, yang akan memberikan beberapa indikasi di tumpukan kesalahan penuh, sepertinya NLS_DATE_LANGUAGE
Anda tidak mengharapkan singkatan bulan berbahasa Inggris.
Apa yang Anda miliki valid dalam bahasa Inggris:
alter session set nls_timestamp_format = 'RR/MM/DD HH24:MI:SSXFF';
alter session set nls_date_language ='ENGLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;
MY_DATE
---------------------------
14/04/15 13:36:58.803000000
Tetapi jika bahasa tanggal default sesi Anda adalah bahasa Polandia (menebak dari profil Anda), ini akan memberikan kesalahan ini - dengan pesan kesalahan masih dalam bahasa Inggris:
alter session set nls_date_language ='POLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;
SQL Error: ORA-01843: not a valid month
01843. 00000 - "not a valid month"
Jika Anda tidak ingin menyetel sesi ke bahasa Inggris, Anda dapat menggantinya untuk pernyataan tertentu dengan memberikan parameter ketiga opsional ke to_timestamp()
:
alter session set nls_date_language ='POLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM',
'NLS_DATE_LANGUAGE=ENGLISH') as my_date
from dual;
MY_DATE
---------------------------
14/04/15 13:36:58.803000000
Anda juga dapat menghindari masalah sepenuhnya dengan menggunakan nomor bulan alih-alih nama bulan, atau menggunakan sintaks literal stempel waktu ANSI:
select timestamp '2014-04-15 13:36:58.803' from dual;
TIMESTAMP'2014-04-1513:36:58.803'
---------------------------------
14/04/15 13:36:58.803000000
Semua metode ini juga berfungsi untuk kolom tanggal; to_date()
fungsi dipengaruhi oleh pengaturan NLS dengan cara yang sama dan memiliki parameter bahasa tanggal opsional yang sama.