2017-12-15 153 views
0

쿼리에 다음 오류가 표시됩니다.DB2 decfloat 오류

"DECFLOAT"함수의 문자열 인수에 잘못된 문자가 있습니다.

그러나 내가 선택하고 모든 필드를 변경하지 않은 : 당신의 비교

select 
RQH.COMPANY, 
RQH.LAST_APRV_DT, 
RQH.CREATION_DATE, 
RQH.RELEASED_DATE, 
RQH.REL_OPER_ID, 
RQH.REQ_NUMBER, 
RQH.REQUESTER, 

RLN.COMPANY, 
RLN.BUYER, 
RLN.DESCRIPTION, 
RLN.TRAN_UNIT_COST, 
RLN.QUANTITY, 
RLN.ITEM, 
RLN.VEN_ITEM, 
RLN.LINE_NBR, 
RLN.MANUF_CODE, 
RLN.MANUF_NBR, 
RLN.VENDOR, 
RLN.REQ_NUMBER, 
RLN.ENTERED_UOM, 


MMD.LINE_NBR, 
MMD.DOC_NBR_NUM, 

VEN.VENDOR_VNAME, 
VEN.VENDOR_GROUP, 
VEN.VENDOR 

from mmd 

join rln on MMD.COMPANY = rln.COMPANY and MMD.DOC_NBR_NUM = rln.REQ_NUMBER 
    and MMD.LINE_NBR = rln.LINE_NBR 

join cpy on rln.company = cpy.company 

join ven on VEN.VENDOR_GROUP = cpy.VENDOR_GROUP and VEN.VENDOR = rln.VENDOR 

join rqh on RLN.COMPANY = RQH.COMPANY and RLN.REQ_NUMBER = RQH.REQ_NUMBER 

where ven.vendor = 20200 
+0

여기서 DECFLOAT 함수가 호출되는 것을 볼 수 없습니다. 방아쇠 문제와 같은 냄새가납니다. 그럼 다시, 당신은 단지 선택을하고 있습니다 ... 내게 암시 적 변환과 데이터 형식 문제라고 생각하게합니다. DB2에 익숙하지 않은 분이라면 소금 한 알을 가지고 생각해보십시오. –

+0

이러한보기가 있습니까? –

+0

@JacobH 아니요, 저는 테이블에서 직접 당깁니다. 나는 더 많은 것을 시험 삼아서 문제가 내 where 문과 관련이있는 것처럼 보이지만 왜 그 문제가없는 다른 유사한 쿼리에서 동일한 테이블에서 정확한 조건을 실행했는지 알 수 없다. –

답변

0

하나는 한쪽에 숫자 데이터 유형과 다른 한편으로 문자 데이터 유형이 있습니다. 해당 쌍의 문자 열에있는 값 중 하나는 숫자로 변환 할 수 없습니다. Db2 data type conversion rules은 한 피연산자가 숫자이고 다른 피연산자가 문자 유형 인 경우 문자 값은 암시 적으로 숫자로 강제 변환됩니다. 이것은 강요 될 수없는 값에 대해서는 분명히 실패 할 것입니다. 그런 값이 유효한 경우 숫자 열을 문자 데이터 형식으로 명시 적으로 캐스팅해야합니다 (필요한 경우 공백으로 채 웁니다).

+0

나는 모든 비교 쌍이 동일한 데이터 형식을 가지고 있는지 확인했다. –

+0

방금 ​​ven.vendor가'character (9)'이고 정수 값'20200'과 비교하고있다. – mustaccio

+0

죄송합니다. 위의 쿼리에서 "ven.vendor = 20200"을 사용하면 위의 오류가 발생합니다. "ven.vendor = '20200'"을 사용하면 데이터가 반환되지 않습니다. "ven.vendor = 20200"을 사용하면 'ven'테이블도 사용하는 다른 쿼리에서 데이터가 채워집니다. 두 쿼리 모두 채워야하는 데이터가 있습니다 (내부 조인 문제가 아닙니다). –

0

"WHERE"절을 모두 제거해도 오류가 계속 발생합니까 아니면 사라 집니까?

+0

내가 decfloat 문제가 생기면 확실하게 알 수 있기 전에 그것은 where 절없이 시간 제한이 될 가능성이 많은 데이터이기 때문에 말할 수는 없지만 대신 날짜 필드를 사용하여 문제없이 실행했습니다. –