안녕하세요~REGEXP_SUBSTR 질문좀 하겟습니다 ㅠ 0 3 1,218

by 기본충실 [Oracle 기초] REGEXP_SUBSTR [2019.06.24 16:58:05]


데이타 245    2469|206|1964


SELECT  DISTINCT REGEXP_SUBSTR(MAPPING_CSH_SEQ, '[^|]+', 1, LEVEL) TXT 
  FROM T_CT_STORYHUB_MAPPING 
 WHERE CSH_SEQ= 245
 CONNECT BY LEVEL <= length(regexp_replace(MAPPING_CSH_SEQ, '[^|]+',''))+1;

이게 너무 느려서 그런데 좀 봐주세요 ㅠ

by 기본충실 [2019.06.24 16:59:52]

아...인라인뷰로 감쌋더니 쉽게 해결햇습니다 ㅠ


by 기본충실 [2019.06.24 17:00:04]

SELECT  DISTINCT REGEXP_SUBSTR(MAPPING_CSH_SEQ, '[^|]+', 1, LEVEL) TXT 
                            FROM (select * from T_CT_STORYHUB_MAPPING where CSH_SEQ= 245)
                        CONNECT BY LEVEL <= length(regexp_replace(MAPPING_CSH_SEQ, '[^|]+',''))+1;


by 마농 [2019.06.24 17:27:30]

connect by level <= n 를 이용한 행 복제 방식은
dual 과 같이 단건 테이블에 적용하는 방식입니다.
다건의 테이블에 직접 걸면 큰일(?) 납니다.
connect by 조건이 where 조건보다 먼저 수행됩니다.
그래서 전체 건에 대한 기하급수적인 행 복제가 발생하여 느린거구요.
따라서 Where 조건이 먼저 수헹되도록 위와 같이 인라인뷰 쓰면 되구요.
인라인뷰 쓴 결과가 1건이라면? Distinct 는 필요 없겠죠.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입