Eroare SQL: ORA-01861: literalul nu se potrivește cu șirul de format 01861 (Programare, Sql, Oracle, Sql Insert)

LizzyPooh a intrebat.

Încerc să inserez date într-un tabel existent și continui să primesc o eroare.

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
);

Eroare:

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.

Doar că nu sunt sigur de ce se tot întâmplă acest lucru, învăț SQL în acest moment, orice ajutor va fi foarte apreciat!

Comentarii

  • putem vedea structura tabelului tău? Bănuiesc că este vorba de numerele de telefon care sunt VARCHAR2 sau ceva de genul ăsta și că le inserați ca fiind NUMBER –  > Por CodeBird.
  • @MikeBurton CREATE TABLE Patient ( PatientNo CHAR(5) NOT NULL PRIMARY KEY, InvoiceNo CHAR(5) NOT NULL, PatientFirstName VARCHAR2(20) NOT NULL, PatientLastName VARCHAR2(20) NOT NULL, PatientStreetAddress VARCHAR2(40) NOT NULL, PatientTown VARCHAR2(20), PatientCounty VARCHAR2(20), PatientPostcode VARCHAR2(8) NOT NULL, DOB DATE NOT NULL, Gender CHAR(1) CONSTRAINT pat_g_nn NOT NULL, PatientHomeTelephoneNumber VARCHAR2(11) CONSTRAINT pat_phtn_nn ); –  > Por LizzyPooh.
  • Pun pariu că este vorba de DOB coloană. În acest caz, încercați să utilizați TO_DATE pentru a analiza șirul de date '1989-12-09' în mod corespunzător. –  > Por mustaccio.
  • PatientHomeTelephoneNumber este varchar2, îl inserați ca NUMBERar trebui să fie înconjurat de '' și nu văd PatientMobileTelephoneNumber în declarația de creare. –  > Por CodeBird.
7 răspunsuri
mustaccio

Încercați să înlocuiți șirul literal pentru data '1989-12-09' cu TO_DATE('1989-12-09','YYYY-MM-DD')

Comentarii

  • Sau, din moment ce este în formatul corect, ai putea folosi un literal de dată ca date '1989-12-09' în loc să folosiți to_date(). –  > Por Alex Poole.
  • Mulțumesc băieți, încă o întrebare, dacă ar fi să faceți ora, de exemplu, ora unei întâlniri, ar trebui să puneți ceva în fața orei dacă este formatată ca „17:43:09”? –  > Por LizzyPooh.
  • @alexpoole este la fel și pentru o oră ??? –  > Por LizzyPooh.
  • Nu există un tip de date de timp în Oracle, va fi în continuare date și cred că va trebui să includeți și partea de dată. –  > Por mustaccio.
  • @LizzyPooh – puteți stoca o dată/ora de programare ca un DATE, populând-o cu to_date('2014-03-21 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), sau timestamp '2014-03-21 09:15:00.0'citește mai mult. –  > Por Alex Poole.

Formatul pe care îl utilizați pentru dată nu se potrivește cu formatul de dată implicit al Oracle.

O instalare implicită a bazei de date Oracle setează FORMAT DEFAULT DATE la dd-MMM-yyyy.

Fie utilizați funcția TO_DATE(dateStr, formatStr) fie utilizați pur și simplu dd-MMM-yyyy modelul formatului de dată.

grvsmth

De asemenea, puteți modifica formatul datei pentru sesiune. Acest lucru este util, de exemplu, în Perl DBI, unde funcția to_date() nu este disponibilă:

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

De asemenea, puteți seta permanent formatul implicit nls_date_format:

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

În Perl DBI puteți executa aceste comenzi cu metoda 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

Dulith De Costa
ORA-01861: literal does not match format string

Acest lucru se întâmplă deoarece ați încercat să introduceți un literal cu un șir de format, dar lungimea șirului de format nu a fost aceeași cu cea a literalului.

Puteți depăși această problemă efectuând următoarea modificare.

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

Ca regulă generală, dacă utilizați funcția TO_DATE, funcția TO_TIMESTAMP, funcția TO_CHAR și alte funcții similare, asigurați-vă că literalul pe care îl furnizați corespunde șirului de format pe care l-ați specificat

gopal

Încercați formatul dd-lună-azi, De exemplu, 02-08-2016 ar trebui să fie în formatul „08-feb-2016”.

KAMAL

Dacă furnizați formatul de dată corect, ar trebui să funcționeze, vă rugăm să verificați din nou dacă ați furnizat formatul de dată corect în valorile de inserție.

Sobhy Elgraidy

încercați să salvați data astfel: aaaa-mm-dd hh:mm:ss.msde exemplu:1992-07-01 00:00:00:00.0care a funcționat pentru mine