Simple Oracle de la requête:littérale ne correspond pas à la chaîne de format
-
28-10-2019 - |
Question
Je veux exécuter une fonction simple dans Oracle.La signature est définie comme suit:
CREATE OR REPLACE FUNCTION NewCaseListForValidation
(
p_fromDate in DATE,
p_toDate in DATE,
p_rowCount in INT
)
RETURN
SYS_REFCURSOR
IS
return_value SYS_REFCURSOR;
...
Je devrais être capable de l'exécuter avec:
var rc refcursor
exec :rc := newcaselistforvalidation('2010-01-01','2011-01-01',100);
print :rc
Mais en tapant "newcaselistforvalidation('2010-01-01','2011-01-01',100)", j'obtiens:
ERROR at line 1:
ORA-01861: literal does not match format string
ORA-06512: at line 1
J'ai googlé un peu et il semble que je ne peux pas comprendre pour saisir la date dans un format correct.Quelqu'un peut-il m'aider?
La solution
Requête NLS_Parameters dans Oracle - vous pourrez alors voir quel format votre base de données accepte les dates.
En règle générale, cependant, j'utilise la fonction to_date ():
to_date('01-01-2011','DD-MM-YYYY');
Au Royaume-Uni pour saisir mes dates.
Autres conseils
Une alternative à la fonction to_date () consiste à utiliser le format standard ANSI pour les littéraux de date ou d'horodatage:
DATE '2010-01-31' TIMESTAMP '2010-01-31 21:22:23'
La date et l'heure sont toujours spécifiées à l'aide des règles ISO (Yyyy-mm-dd et 24hour format pour le temps)
Cela fonctionne également sur beaucoup d'autres DBM (conformes standard).
Il est préférable de ne pas compter sur une valeur particulière dans NLS_PARAMETERS Paramètres, car cela fera votre fonction Pause Dans l'env avec un autre Nls_date_format.
Identifiant spécifier explicitement le formatage de la date dans votre fonction comme suggéré dans la réponse ci-dessus
exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100);
INSÉREZ DANS tblDate (dateStart) Values ('20-JUN-2013');Si vous modifiez le mois entier en chaîne de caractères 'DD-MON-YYYY' fonctionne comme un valide chaîne de données sans avoir à faire précéder la DATE de l'identificateur.