안녕하세요.
자바에서 쿼리로 오라클 DB에 like 처리할때 문제가 있는데
원인을 모르겠네요.
1. 증상
자바에서 테이블 조회조건으로 like 검색을 시도 like '%' + 변수 +' %'
2. 결과
대부분 정상 동작하는데
20 30으로 검색하면
java에서 찍힐때는 정상적으로 나오는데
쿼리에서는 '변수%' 로 변경됨
예를 들어 20초 라는 검색어를 입력하면
쿼리에서는 like '초%'
라고 나옵니다.
혹시나해서 40초 같은걸 넣으면 정상적으로 like '%40초%' 이렇게 찍히네요
20, 30 두개 찾았는데
%20, %30 이 의미하는게 어떤건가요?
이외에 어떤 문제되는 항목을 있을지와
처리 방법에 대하여 확인중입니다.
쿼리 가 자바에서 넘어가기 전에 찍으면 제대로 '% %' 가 찍히는데
쿼리 로그에서 보면 빠지네요
오라클 문제는 아닌거 같은데 어떻게 분석해야할지 조언 부탁드립니다.
보내는 쪽에서는 SQL쿼리를 인코딩하여 넘길 것이고,
받는 쪽에서는 디코딩하여 받을 것입니다.
이 때 %20 을 인코딩된 값으로 판단하여 공백으로 디코딩합니다.
이게 원인일 것이구요.
인코딩값으로 인지하여 디코딩 하지 않게 해야 합니다.
1. 자바에서 % 대신 다른 문자로 치환하여 넘겼다가
받는 쪽에서 다시 언래의 % 로 치환하는 방법
2. 쿼리에서 '%' 를 제거하는 방법
- 변경전 : " LIKE '%" + 검색어 + "%' "
- 변경후 : " LIKE CHR(37)||'" + 검색어 + "'||CHR(37) "
3. 기타 더 좋은 방법은 없는지 검색해 보기
양방향 like 검색을 사용하는데
이게 특정 문자에서만 발생되는 문제라서 고민이였습니다.
발견한건 %20 %30 두개고
그외에는 모두 임의로 테스트할때 잘되더라고요
두분의 답변을 보고 2가지 처리 부분을 생각하려고 합니다.
1. clob 데이터를 조회하기 때문에 instr 로 처리하는게 유용하지 않을수 있음
2. 쿼리 호출 바로 직전 까지 출력하면 %20 %30 둘다 잘나오는데
쿼리로 들어간 로그에서 해당부분이 누락됨 (마농님 1번이 안될수 있음)
마농님의 2번 답변처럼 검색할때 chr(37)로 변형처리하는게 잘돌아가는지 봐야 될거같습니다.
백면서생님 답변처럼 양방향이 있을 경우 instr 를 이용하는 방법을
써야겠네요
두분 답변 모두 감사드립니다