web-dev-qa-db-ja.com

SQLエラー:ORA-01861:リテラルは書式文字列01861と一致しません

既存のテーブルにデータを挿入しようとしてエラーが発生し続けています。

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 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.

なぜこれが起こり続けるのか分からないが、私は現時点でSQLを学んでいますが、どんな助けも大歓迎です!

44
LizzyPooh

日付'1989-12-09'の文字列リテラルをTO_DATE('1989-12-09','YYYY-MM-DD')に置き換えてみてください

98
mustaccio

日付に使用する形式は、Oracleのデフォルトの日付形式と一致しません。

Oracle Databaseのデフォルトのインストールでは、DEFAULT DATE FORMATがdd-MMM-yyyyに設定されます。

関数TO_DATE(dateStr, formatStr)を使用するか、単にdd-MMM-yyyy日付形式モデルを使用します。

5
Mitz

セッションの日付形式を変更することもできます。これは、たとえば、to_date()関数が使用できないPerl DBIで役立ちます。

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

デフォルトのnls_date_formatも永続的に設定できます。

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

Perl DBIでは、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=

4
grvsmth

このyyyy-mm-dd hh:mm:ss.msのような日付を保存してみてください。例:1992-07-01 00:00:00.0

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

これは、フォーマット文字列でリテラルを入力しようとしたが、フォーマット文字列の長さがリテラルと同じ長さではなかったために発生します。

次の変更を実行することで、この問題を克服できます。

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

一般的なルールとして、TO_DATE関数、TO_TIMESTAMP関数、TO_CHAR関数、および同様の関数を使用している場合は、指定するリテラルが指定したフォーマット文字列と一致することを確認してください

0
Dulith De Costa