'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)