A 라는 테이블에 user_id 는 char(16) 으로 선언되어있고, B 라는 테이블에 user_id 는 varchar2(16) 으로 선언되어 있습니다. 하지만 이 둘을 조인해야하는데. 조인이 안되네요. 둘 중 하나를 데이터 형변환을 해야 할 것같은데... 어떤 형변환 함수를 써야할지 막막하여 도움을 요청해봅니다.
훔...Nonpadded 문자비교 때문에 그렇게 되는 듯 하군요...;
일단 char(16)쪽 user_id를 RTRIM등 해서 비교하고 결과를 알려주세요...;
WHERE RTRIM(A.user_id) = B.user_id
char(16)쪽에 빈공백이 있어서 안되는겁니다. 위와같이 trim으로 공백을 제거하면 됩니다.
A테이블의 USER_ID에 'ABC'라는 값이 들어간다면
실제로는 'ABC '의 값이 들어갑니다.
그리고,
B테이블의 USER_ID에 'ABC'라는 값이 들어간다면
'ABC'로 들어가죠!
CHAR과 VARCHAR2의 타입의 차이점을 이해하신다면
쉽게 해결가능한 문제입니다.
이번 기회에 A테이블의 USER_ID의 칼럼 타입을 VARCHAR2로 변경하심
어떨지여?!
A와 B 조인시에 제대로 인덱스를 타지 못해 쿼리 속도가 저하될거라 짐작됨당.
아님.. 함수인덱스를 사용하셔야 할꺼 같음다~!!
음...질문자분께서 느끼시고 해결방법은 그 다음 말씀드리려 했는데 빈껍데기님이 벌써 주셨네요...^^; 이런 경우를 "영역무결성"에 위배된 것이라 하며, 이는 해당 모델링상의 오류입니다. "이번기회에"가 아니라 올바른 시스템을 위해서는 반드시 맞춰줘야 하는 항목이라고 생각합니다... 이 무결성을 맞춰주라고 강력추천합니다...참고하세요...; 건승하시길...수고하세요~~ ps) 참고로 오라클에서 문자비교 방법은 Nonpadded와 Blank-Padded가 있습니다. data type등에 따라 약간 씩 다른데 이 중 varchar2나 nvarchar2 type이 있는 경우는 Nonpadded비교를 수행하게 됩니다.