2012-10-25 6 views
5

저는 iseries/DB2에 익숙하지 않습니다. 그러나 기본 데이터베이스로 사용하는 웹 사이트에서 작업합니다."[SQL0802] 데이터 매핑 오류의 데이터 변환"예외가 발생하는 이유는 무엇입니까?

최근에 새 테이블이 기존 테이블에 추가되었습니다.

Type: S 
Length: 9 
Dec: 2 

이는 소수점 앞에 6 자리와 소수점 이하 2 자리 숫자 필드의 나에게 말한다 : 나는 AS400를 통해 볼 때, 나는 다음과 같은 데이터 유형을 참조하십시오.

간단한 SELECT (SELECT MYCOL FROM MYTABLE)로 데이터를 쿼리 할 때 문제없이 모든 레코드가 반환됩니다. 나는 다음과 같은 예외가 같은 열에서 DISTINCT, GROUP BY, 또는 ORDER BY을 사용하려고 할 때, :

[SQL0802] Data conversion of data mapping error 

나는 적어도 하나 개의 기록이 잘못된 데이터를 가지고 추론 한 - 무엇을 내 DBA 통화 "공백" 또는 "4 O". 어떻게 이것이 가능할까요? 유효하지 않은 데이터가 해당 열에 추가하려고 시도 할 때 데이터베이스에서 예외가 발생하지 않아야합니까?

내 쿼리에서 나쁜 레코드를 필터링하는 등의 방법으로 내가이 문제를 해결할 수 있습니까?

+4

구역 화 숫자 (9,2) 열은 소수점 왼쪽에 7 자리가 있습니다 (즉, 9에서 2 빼기) – WarrenT

+0

SQL0802 메시지의 두 번째 레벨 텍스트에 표시된 오류 유형 코드는 무엇입니까? – WarrenT

+0

@WarrenT "SQLSTATE 22023" –

답변

2

유일한 해결책은 열에 공백 값을 확인한 다음 스크립트가 발견되면이를 0으로 업데이트하는 스크립트를 작성하는 것입니다.

4

"4 O"는 공백이나 공백 문자에 대한 EBCDIC 코드이며 레코드의 새 공간에 배치되는 기본값입니다.

기존 프로그램/작업으로 인해 10 진수 데이터 오류가 발생할 수 있습니다. 예를 들어 CPYF 명령에 FMTOPT(*NOCHK) 옵션을 사용하여 새 파일을 작성하고 채우는 경우입니다.

가장 쉬운 수정 방법은 HLL 프로그램 (RPG)을 작성하여 파일을 읽고 레코드를 수정하는 것입니다.

2

파일의 레코드 형식 검사가 해제 된 경우 [즉, LVLCHK(*NO)] 또는 그 다음에 HLL 프로그램으로 대체됩니다. 새 레코드로 다시 컴파일되지 않은 레코드 (예 : RPG, COBOL 등)는이 컬럼에 유효하지 않은 데이터가있는 레코드를 작성할 수 있습니다 (특히 새 컬럼이 레코드의 끝에 있지 않은 경우).

원시 I/O를 사용하여이 파일의 레코드를 쓰거나 업데이트하는 모든 프로그램이 다시 컴파일되는지 확인하십시오.

+0

James가 말했듯이, HLL 프로그램은 현재 오류가있는 레코드를 수정하는 가장 쉬운 방법 일 수 있습니다.그러나 반복되는 오류를 방지하려면 실제 파일이나 논리에 대한 레코드를 쓰거나 업데이트하는 프로그램을 다시 컴파일해야합니다. – WarrenT

0

키 열을 정수로 강제 변환하여이 오류를 해결할 수있었습니다. 나는 ...이에 ... [이에서 가입

FROM DAILYV INNER JOIN BXV ON CAST(DAILYV.DAITEM AS INT)=CAST(BXV.BXPACK AS INT) 

FROM DAILYV INNER JOIN BXV ON DAILYV.DAITEM=BXV.BXPACK 

를 변경 ... 그리고 나는 테이블에 어떤 수정을하지 않았다. 이것은 그 안에 많은 쓰레기가있는 매우 오래된 데이터베이스입니다. 나는 많은 수정을했으나 진행중인 작업입니다.

관련 문제