Вставьте сбой из-за неправильного не числового символа

StackOverflow https://stackoverflow.com/questions/4292452

  •  28-09-2019
  •  | 
  •  

Вопрос

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, является 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-Yyyy. Вы передаете дату в формате Mon-Dd-Yyyy.

Есть два - ну три - способы борьбы с этим.

  1. Используйте явную маску формата: to_date('Jan-10-1999', 'MON-DD-YYYY')
  2. сдача параметр nls_date_format., на сеансе или даже уровне базы данных. F.Вы больше здесь и здесь.
  3. Измените оператор вставки, чтобы пройти дату в ожидаемом формате.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top