by 날아라갑을 [SQL Developer] 수치부적합 xml쿼리 [2018.10.15 15:03:14]
안녕하세요.. 질문 제목과 같은 에러가 계속나타나서 해결법을 찾고싶습니다
해당 쿼리는 아래와같이 이루어져있습니다
SELECT A.* FROM( SELECT A.USER_ID, A.USER_NM, A.COMP_SEQ || '' AS COMP_SEQ, B.COMP_NM , C.CUST_SEQ FROM CM_USER_TB A, (SELECT A.MINOR_NM AS COMP_NM, A.MINOR_SEQ, B.VALUE_TEXT AS COMP_SEQ
FROM CM_ENV_MINOR_TB A, CM_ENV_MINOR_VALUE_TB B
WHERE 1=1
AND A.MAJOR_SEQ=1009
AND A.USE_YN=1
AND A.MINOR_SEQ=B.MINOR_SEQ
AND B.TITLE_SERL=6) B, CM_USER_SITE_TB C
WHERE 1=1
--AND A.USER_TYPE = 10070005
AND A.USE_YN = 1
AND A.COMP_SEQ(+) = B.COMP_SEQ
AND A.USER_SEQ = C.USER_SEQ) A, MA_CUST_TB B
WHERE 1=1
AND A.CUST_SEQ = B.CUST_SEQ
AND B.COMP_SEQ = '1'
--AND B.CUST_CLS2 = '10080010'
AND B.COMP_SEQ NOT IN('77','99')
ORDER BY A.COMP_SEQ DESC
;
글자색상이 들어간부분만 수치부적합 에러가 나타납니다
FROM 절에 들어가있는 테이블들에 AND조건의 컬럼을 보면 NUMBER(12,0) 상태입니다
그렇지만.. 조건 = '값'이 들어간다고 수치부적합이 나타나는지 궁금합니다 ;;
1. 조건을 주었을 때 에러가 안나고 조건을 빼면 에러가 난다면?
- 조건에 해당하는 자료중에는 에러자료가 없었던 것입니다.
- 해당 조건이 원인이 아니라 다른 조건이 원인입니다.
- 의심가는 구문은 (A.COMP_SEQ(+) = B.COMP_SEQ) 입니다.
2. A.COMP_SEQ || '' AS COMP_SEQ 구문을 보면 숫자를 문자로 바꾸려는 시도로 보입니다.
- 따라서 좌변의 A.COMP_SEQ 는 숫자인 듯 하고.
3. B.VALUE_TEXT AS COMP_SEQ 구문의 컬럼명을 보면 문자형인 것 처럼 보입니다.
- 따라서 우변의 B.COMP_SEQ 는 문자인 듯 하네요.
4. 문자와 숫자를 비교하면
- 문자가 숫자로 자동형변환 됩니다.
- 이 과정에서 오류가 발생하는 거구요.
5. 따라서 문자끼리 비교하도록 조건을 바꿔보세요.
- 변경전 : AND A.COMP_SEQ(+) = B.COMP_SEQ
- 변경후 : AND A.COMP_SEQ(+)||'' = B.COMP_SEQ