본문 바로가기

DB

[oracle] REGEXP_LIKE 의 byte 제한

오라클의 REGEXP_LIKE( string, pattern ) 구문을 잘 사용하고 있었는데
결과값이 하나도 나오지 않는 문제가 있었습니다.

찾아보니 정규식이 사용되는 패턴부는 512byte 의 제한을 갖고 있습니다.
제 패턴부는 다음과 같이 | 를 사용하고 있었습니다.

SELECT 123
  FROM DUAL 
WHERE REGEXP_LIKE('STR1', 'STR1|STR2|STR3')



번거롭지만 IN 절로 변경해야겠다고 생각해서 다음과 같이 변경해봤습니다.
오라클에서 ' 를 escape 하려면 '' 를 쓰더라구요.

SELECT 123
  FROM DUAL 
WHERE 'STR1' IN (REPLACE('''STR1|STR2|STR3''','|',''','''))



REPLACE를 통해 |',' 로 변경해 IN('STR1','STR2','STR3') 로 인식되길 유도한 것입니다.
문자열로 빼면 맞게 나오는데 결과가 나오지 않는 걸 보면 인식하지 못하나 봅니다.
구글링 결과 아래와 같은 해결책을 발견해 수정했습니다.

SELECT 123 
  FROM DUAL
WHERE '|' || 'STR1|STR2|STR3' || '|' LIKE '%|' || 'STR1' || '|%';



딱 한 달 뒤의 제가 봐도 뭐야 이거 할 만한 쿼리라서
이 포스트 링크를 주석으로 달려고 포스팅합니다 ㅋㅋㅋㅋ ㅠㅠ