Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bukan bulan yang valid pada pernyataan INSERT

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan nomor baris?

  2. Nama Oracle TNS tidak muncul saat menambahkan koneksi baru ke SQL Developer

  3. Menggunakan subquery dalam pernyataan Periksa di Oracle

  4. Cara menggunakan Fungsi Penggabungan di Oracle

  5. Program PL/SQL untuk Mencetak Detail Karyawan