web-dev-qa-db-fra.com

Erreur SQL: ORA-01861: le littéral ne correspond pas à la chaîne de format 01861

J'essaie d'insérer des données dans une table existante et continue de 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.

Je ne sais pas pourquoi cela continue de se produire. J'apprends le SQL pour le moment, toute aide sera grandement appréciée!

36
LizzyPooh

Essayez de remplacer le littéral chaîne pour date '1989-12-09' par TO_DATE('1989-12-09','YYYY-MM-DD').

83
mustaccio

Le format que vous utilisez pour la date ne correspond pas au format de date par défaut d'Oracle. Une installation par défaut d'Oracle Database définit le format DATE par défaut sur DD-MON-YYYY. Vous pouvez utiliser la fonction to_date ou simplement utiliser le modèle de format de date DD-MON-YYYY.

3
Mitz

Vous pouvez également changer le format de date pour 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 également définir de manière permanente la valeur par défaut nls_date_format:

ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD'

Dans Perl DBI, vous pouvez exécuter ces commandes avec la méthode do ():

$db->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD');

http://www.dba-Oracle.com/t_dbi_interface1.htmhttps://community.Oracle.com/thread/682596?start=15&tstart=0

2
grvsmth

essayez de réserver la date comme ceci aaaa-mm-jj hh: mm: ss.ms par exemple: 1992-07-01 00: 00: 00.0 .__

0
Vibe
ORA-01861: literal does not match format string

Cela est dû au fait 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.

Vous pouvez surmonter ce problème en effectuant les modifications suivantes.

TO_DATE('1989-12-09','YYYY-MM-DD')

En règle générale, si vous utilisez la fonction TO_DATE, TO_TIMESTAMP fonction, fonction TO_CHAR et fonctions similaires, assurez-vous que le le littéral que vous fournissez correspond à la chaîne de format que vous avez spécifié

0
Dulith De Costa