2010-11-27 4 views
1

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. 

답변

2

* 원인 : 입력 데이터 올바르지 했던 날짜 형식 모델을 이용하여 변환한다. 입력 데이터에 숫자 형식이없는 숫자가 인 숫자가 없습니다.

사용중인 날짜 문자열이 오라클이 예상하는 문자열과 일치하지 않습니다. 기본 형식 iirc는 사용하려고하는 Mon-DD-YYYY가 아닌 DD-Mon-YYYY입니다.

+0

날짜 형식은 클라이언트에 의해 변경 될 수 있습니다. 실제로 "기본값"은 없습니다. 다른 답변과 마찬가지로 TO_DATE를 사용해야합니다. –

+0

'TO_DATE'를 명시 적으로 호출하지 않고도 설정할 수 있다는 사실은 명시 적으로 예, 기본 형식이 있음을 의미합니다. 그러나 예, TO_DATE를 호출하는 것이 훨씬 강력합니다. – Donnie

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

TO_DATE를 올바른 형식으로 사용하여 날짜를 제공해야합니다.

1

오류가 설명합니다.

"입력 데이터는 날짜 형식 모델은 정확 입력 데이터는 숫자가 형식 모델에 의해 요구 된 수를 포함하지 않은 를 사용하여 변환 할 "

즉, date_of_birth 열에 전달할 값의 형식이 잘못되었습니다. 기본적으로 오라클의 날짜는 DD-MON-YYYY 형식이어야합니다. MON-DD-YYYY 형식으로 날짜를 전달하고 있습니다.

이 문제를 처리하는 데는 두 가지 방법이 있습니다. 세션 또는 데이터베이스 레벨에서, to_date('Jan-10-1999', 'MON-DD-YYYY')

  • 변화 the NLS_DATE_FORMAT parameter :
    1. 는 명시 적 형식 마스크를 사용하십시오. F ind out more herehere.
    2. 예상되는 형식으로 날짜를 전달하려면 insert 문을 변경하십시오.
  • 관련 문제