Ketika saya mencoba mengeksekusi cuplikan ini:
cmd.CommandText = "SELECT alarm_id,definition_description,element_id,
TO_CHAR (alarm_datetime, 'YYYY-MM-DD HH24:MI:SS'),severity,
problem_text,status FROM aircom.alarms
WHERE status = 1 and
TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS') > TO_DATE ('07.09.2008
09:43:00', 'DD.MM.YYYY HH24:MI:SS')
order
by ALARM_DATETIME desc";
Saya mendapatkan:
ORA-01861: literal does not match format string
Tidak ada masalah dengan koneksi database karena saya dapat menjalankan perintah SQL dasar.
Apa masalahnya dengan pernyataan ini?
Hapus TO_DATE dalam klausa WHERE
TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS')
dan ubah kodenya menjadi
alarm_datetime
Kesalahan berasal dari konversi to_date dari kolom tanggal.
Penjelasan Tambahan: Oracle mengubah alarm_datetime Anda menjadi string menggunakan format tanggal yang bergantung pada nls. Setelah itu, Oracle memanggil to_date dengan mask tanggal yang Anda berikan. Ini melempar pengecualian.
Error berarti Anda mencoba memasukkan literal dengan string format, tetapi panjang string format tidak sama panjangnya dengan literal.
Salah satu format ini salah:
TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
SELECT alarm_id
,definition_description
,element_id
,TO_CHAR (alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
,severity
, problem_text
,status
FROM aircom.alarms
WHERE status = 1
AND TO_char (alarm_datetime,'DD.MM.YYYY HH24:MI:SS') > TO_DATE ('07.09.2008 09:43:00', 'DD.MM.YYYY HH24:MI:SS')
ORDER BY ALARM_DATETIME DESC