오라클 clob 형식의 문자열을 다중구분자(@#&)로 구분하여 행을 분리하는 로직 구현중입니다.
clob 형식의 특성상 가장 긴 데이터의 경우 855만자를 초과하여
테스트 데이터를 만들어서 문의드립니다.
SELECT REGEXP_SUBSTR(a.DATA, '[^@#&]+', 1, b.row_cnt) AS val FROM (SELECT '회사코드|A@#&부서코드|AA@#&부서명|R&D센터' DATA FROM DUAL UNION ALL SELECT '회사코드|C@#&부서코드|CC@#&부서명|기획센터' DATA FROM DUAL) A , (SELECT LEVEL row_cnt FROM dual CONNECT BY LEVEL <= 20) b WHERE b.row_cnt <= REGEXP_COUNT(a.DATA, '@#&') + 1;
질문은
@#& 특수문자 3개를 조합한 컬럼을 구분자로 쓰고있는데,
이를 활용하여 행분리를 하고자 했는데
@, #, & 중 한개만 들어가도 분리가되고있습니다
도와주세요ㅠㅠ
<원하는 결과값>
회사코드|A
회사코드|C
부서코드|AA
부서코드|CC
부서명|R&D센터
부서명|기획센터
<실제 결과값>
회사코드|A
회사코드|C
부서코드|AA
부서코드|CC
부서명|R
부서명|기획센터
SET DEFINE OFF; WITH t AS ( SELECT 1 pk, '회사코드|A@#&부서코드|AA@#&부서명|R&D센터' data FROM dual UNION ALL SELECT 2, '회사코드|C@#&부서코드|CC@#&부서명|기획센터' FROM dual ) -- 사용되지 않는 문자로 변경해서 해보세요. (예 : '@#&' > '♪') SELECT a.pk , b.row_cnt , REGEXP_SUBSTR(a.v, '[^♪]+', 1, b.row_cnt) val FROM (SELECT pk, REPLACE(data, '@#&', '♪') v FROM t) a , (SELECT LEVEL row_cnt FROM dual CONNECT BY LEVEL <= 20) b WHERE b.row_cnt <= REGEXP_COUNT(a.v, '[^♪]+') ORDER BY pk, row_cnt ;