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

Menghadapi Kesalahan SQL:ORA-01843:bukan bulan yang valid

'04/04/2012 13:35 PM' bukan tanggal - ini adalah string.

Oracle akan melakukan TO_DATE( string_value, format_mask ) implicit implisit pada literal non-tanggal saat memasukkannya ke dalam DATE kolom menggunakan nilai NLS_DATE_FORMAT parameter sesi sebagai topeng format (catatan:ini adalah parameter sesi dan milik klien; ini bukan pengaturan global ). Jika literal non-tanggal cocok dengan format ini maka itu akan berfungsi (dan jika tidak maka tidak akan) - namun, jika NLS_DATE_FORMAT pernah diubah maka akan segera rusak (sangat sulit untuk di-debug karena kode yang berfungsi tidak akan tetapi tidak ada yang akan mengubah kode).

Anda dapat mengetahui NLS_DATE_FORMAT Anda saat ini dengan pertanyaan:

SELECT VALUE
FROM   NLS_SESSION_PARAMETERS
WHERE  PARAMETER = 'NLS_DATE_FORMAT';

Lebih baik menggunakan TO_DATE() . secara eksplisit dengan format mask yang benar atau menggunakan literal tanggal ANSI/ISO (yaitu DATE '2012-04-04' atau TIMESTAMP '2012-04-04 13:35' ).

Anda dapat melakukan:

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );

(Anda tidak memerlukan AM/PM karena komponen jam sudah pada jam 24 jam)

atau

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );

(menggunakan literal cap waktu ANSI/ISO yang secara implisit akan dikonversi oleh Oracle menjadi tanggal)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengurangan Tanggal Oracle

  2. Mungkinkah ada kebuntuan saat menggunakan penguncian optimis?

  3. Pencarian spasial Oracle dalam jarak jauh

  4. Waktu pembukaan koneksi SQL yang sangat lama

  5. Bagaimana Anda mendapatkan hasil yang diformat dengan baik dari prosedur Oracle yang mengembalikan kursor referensi?