質問

hy

テーブル:

create table Players (PlayerNo number (4) not null, Name varchar2(15), date_of_birth date,leagno varchar(4));

間違った挿入:

insert into PLAYERS (PlayerNo,Name,date_of_birth,leagno) VALUES (1,'Philipp K','Jan-10-1999','1')

どうしたの?

エラーコード:

Fehler beim Start in Zeile 1 in Befehl:
insert into PLAYERS (PlayerNo,Name,date_of_birth,leagno) VALUES (1,'Philipp K','Jan-10-1999','1')
Fehlerbericht:
SQL-Fehler: ORA-01858: Ein nicht-numerisches Zeichen wurde gefunden, während ein numerisches Zeichen erwartet wurde
01858. 00000 -  "a non-numeric character was found where a numeric was expected"
*Cause:    The input data to be converted using a date format model was
           incorrect.  The input data did not contain a number where a number was
           required by the format model.
*Action:   Fix the input data or the date format model to make sure the
           elements match in number and type.  Then retry the operation.
役に立ちましたか?

解決

*原因:日付形式モデルを使用して変換する入力データは正しくありませんでした。入力データには、フォーマットモデルで数値が必要な数字が含まれていませんでした。

使用している日付文字列は、Oracleが期待しているものと一致しません。デフォルトの形式であるIIRCは、使用しようとしているMon-Dd-yyyではなく、DD-Mon-Yyyyです。

他のヒント

INSERT
INTO PLAYERS
  (
    PlayerNo,
    Name,
    date_of_birth,
    leagno
  )
  VALUES
  (
    1,
    'Philipp K',
    TO_DATE('Jan-10-1999','Mon-dd-yyyy'),
    '1'
  )

適切な形式でto_dateを使用して日付を提供する必要があります。

エラーが説明します:

「日付形式モデルを使用して変換される入力データは正しくありませんでした。入力データには、フォーマットモデルで数値が必要な数字が含まれていませんでした」

これが意味するのは、date_of_birth列に渡されている値は間違った形式です。デフォルトでは、Oracleは日付がdd-mon-yyyの形式であることを期待しています。 Mon-Dd-yyyyの形式で日付を渡しています。

これに対処する方法は2つあります。

  1. 明示的なフォーマットマスクを使用します。 to_date('Jan-10-1999', 'MON-DD-YYYY')
  2. 変化する nls_date_formatパラメーター, 、セッションまたはデータベースレベルでさえ。 f詳細はこちらです ここ.
  3. 挿入ステートメントを変更して、予想される形式で日付を渡します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top