既存のテーブルにデータを挿入しようとしてエラーが発生し続けています。
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を学んでいますが、どんな助けも大歓迎です!
日付'1989-12-09'
の文字列リテラルをTO_DATE('1989-12-09','YYYY-MM-DD')
に置き換えてみてください
日付に使用する形式は、Oracleのデフォルトの日付形式と一致しません。
Oracle Databaseのデフォルトのインストールでは、DEFAULT DATE FORMATがdd-MMM-yyyy
に設定されます。
関数TO_DATE(dateStr, formatStr)
を使用するか、単にdd-MMM-yyyy
日付形式モデルを使用します。
セッションの日付形式を変更することもできます。これは、たとえば、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=
このyyyy-mm-dd hh:mm:ss.msのような日付を保存してみてください。例:1992-07-01 00:00:00.0
ORA-01861: literal does not match format string
これは、フォーマット文字列でリテラルを入力しようとしたが、フォーマット文字列の長さがリテラルと同じ長さではなかったために発生します。
次の変更を実行することで、この問題を克服できます。
TO_DATE('1989-12-09','YYYY-MM-DD')
一般的なルールとして、TO_DATE関数、TO_TIMESTAMP関数、TO_CHAR関数、および同様の関数を使用している場合は、指定するリテラルが指定したフォーマット文字列と一致することを確認してください