Quand j'essaye d'exécuter cet extrait:
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";
Je reçois:
ORA-01861: literal does not match format string
La connexion à la base de données ne pose aucun problème car je peux exécuter des commandes SQL de base.
Quel est le problème avec cette déclaration?
Supprimer le TO_DATE dans la clause WHERE
TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS')
et changez le code en
alarm_datetime
L'erreur provient de la conversion to_date d'une colonne de date.
Ajout de l'explication: Oracle convertit votre alarm_datetime en chaîne utilisant son format de date dépendant de nls. Après cela, il appelle to_date avec le masque de date fourni. Cela jette l'exception.
L'erreur signifie que vous avez essayé d'entrer un littéral avec une chaîne de format, mais que la longueur de la chaîne de format n'était pas la même que celle du littéral.
L'un de ces formats est incorrect:
TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
Juste avant d'exécuter la requête: alter session set NLS_DATE_FORMAT = "DD.MM.YYYY HH24: MI: SS"; ou quel que soit le format dans lequel vous donnez les informations à la fonction de date. Cela devrait corriger l'erreur ORA
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