Erreur SQL: ORA-01861: literal ne correspond pas à la chaîne de format 01861
j'essaie d'insérer des données dans une table existante et de continuer à recevoir une erreur.
INSERT INTO Patient
(
PatientNo,
PatientFirstName,
PatientLastName,
PatientStreetAddress,
PatientTown,
PatientCounty,
PatientPostcode,
DOB,
Gender,
PatientHomeTelephoneNumber,
PatientMobileTelephoneNumber
)
VALUES
(
121,
'Miles',
'Malone',
'64 Zoo Lane',
'Clapham',
'United Kingdom',
'SW4 9LP',
'1989-12-09',
'M',
02086950291,
07498635200
);
Erreur:
Error starting at line : 1 in command -
INSERT INTO Patient (PatientNo,PatientFirstName,PatientLastName,PatientStreetAddress,PatientTown,PatientCounty,PatientPostcode,DOB,Gender,PatientHomeTelephoneNumber,PatientMobileTelephoneNumber)
VALUES (121, 'Miles', 'Malone', '64 Zoo Lane', 'Clapham', 'United Kingdom','SW4 9LP','1989-12-09','M',02086950291,07498635200)
Error report -
SQL Error: ORA-01861: literal does not match format string
01861. 00000 - "literal does not match format string"
*Cause: Literals in the input must be the same length as literals in
the format string (with the exception of leading whitespace). If the
"FX" modifier has been toggled on, the literal must match exactly,
with no extra whitespace.
*Action: Correct the format string to match the literal.
juste pas sûr pourquoi cela continue à se produire je suis en train D'apprendre SQL en ce moment, toute aide sera grandement appréciée!
8 réponses
essayez de remplacer la chaîne de caractères littéral pour date '1989-12-09'
TO_DATE('1989-12-09','YYYY-MM-DD')
le format que vous utilisez pour la date ne correspond pas au format de Date par défaut de l'oracle. Une installation par défaut de la base de données Oracle fixe le format de DATE par défaut à JJ-lun-YYYY. Vous pouvez utiliser la fonction to_date ou tout simplement utiliser le modèle de format de date JJ-lun-AAAA.
vous pouvez également modifier le format de la date de la session. Ceci est utile, par exemple, dans Perl DBI, où la fonction to_date () n'est pas disponible:
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'
vous pouvez définir de façon permanente le nls_date_format par défaut ainsi:
ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD'
dans Perl DBI vous pouvez exécuter ces commandes avec le do() méthode:
$db->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD');
http://www.dba-oracle.com/t_dbi_interface1.htm https://community.oracle.com/thread/682596?start=15&tstart=0
"SELECT ci.PARTY_NAME, sm.DC_No,ic.DC_DATE, sm.bill_no,sr.sales_DATE,sum(sm.QTY), 'Buyer' as issue_type " +
" FROM sales_register sr,customer_issue ci join ( SELECT ISSUE_DATE AS DC_DATE,issue_id FROM ISSUE UNION SELECT ISSUE_DATE,issue_id AS DC_DATE FROM CUSTOMER_ISSUE) IC on ic.issue_id=ci.issue_id " +
" join sales_mat_reg sm on ic.issue_id=sm.issue_id where ic.DC_DATE between to_date('"+from_date+"','DD-MON-YY') " +
" and to_date('"+to_date+"','DD-MON-YY') group by ci.PARTY_NAME, sm.DC_No, sm.bill_no, ic.DC_DATE, sr.sales_DATE,issue_type
literal does not match format string
essayez d'enregistrer la date comme ceci aaaa-mm-jj hh:mm:ss.ms exemple: 1992-07-01 00:00:00.0 cela a fonctionné pour moi
ORA-01861: literal does not match format string
cela se produit parce que vous avez essayé d'entrer un littéral avec une chaîne de format, mais la longueur de la chaîne de format n'était pas la même longueur que le littéral.
vous pouvez surmonter ce problème en effectuant la modification suivante.
TO_DATE('1989-12-09','YYYY-MM-DD')
en règle générale, si vous utilisez la fonction TO_DATE, TO_TIMESTAMP la fonction, la fonction TO_CHAR, et des fonctions similaires, assurez-vous que l' literal que vous fournissez correspond à la chaîne de format vous avez spécifié
essayez le format JJ-lun-yyyy, par exemple 02-08-2016 devrait être dans le format "08-feb-2016".
si vous fournissez un format de date approprié, cela devrait fonctionner. veuillez revérifier une fois si vous avez donné le format de date correct dans insert values