SQL 작성이 잘 되지 않아 문의드립니다
현재 데이터는 아래와 같습니다
테이블명 | 엔터티명 | 메시지 |
TAB1 | 테이블1 | warring (code 123) for column "컬럼1" at row 101 warring (code 123) for column "컬럼1" at row 102 warring (code 123) for column "컬럼3" at row 103 |
TAB2 | 테이블2 | error (code 123) for column "컬럼1" at row 102 |
TAB3 | 테이블3 | warring (code 123) for column "컬럼2" at row 11 warring (code 123) for column "컬럼2" at row 12 |
위 데이터를 아래와 같이 출력하고 싶습니다
테이블명 | 엔터티명 | 오류코드 | 오류컬럼 | 오류 ROW |
TAB1 | 테이블1 | 123 | 컬럼1 | 101 |
TAB1 | 테이블1 | 123 | 컬럼1 | 102 |
TAB1 | 테이블1 | 123 | 컬럼3 | 103 |
TAB2 | 테이블2 | 456 | 컬럼1 | 102 |
TAB3 | 테이블3 | 123 | 컬럼2 | 11 |
TAB3 | 테이블3 | 123 | 컬럼2 | 12 |
WITH t AS ( SELECT 'TAB1' t_nm, '테이블1' e_nm, 'warring (code 123) for column "컬럼1" at row 101 warring (code 123) for column "컬럼1" at row 102 warring (code 123) for column "컬럼3" at row 103' msg FROM dual UNION ALL SELECT 'TAB2', '테이블2', 'error (code 123) for column "컬럼1" at row 102' FROM dual UNION ALL SELECT 'TAB3', '테이블3', 'warring (code 123) for column "컬럼2" at row 11 warring (code 123) for column "컬럼2" at row 12' FROM dual ) SELECT t_nm , e_nm , lv , SUBSTR(REGEXP_SUBSTR(msg, 'code [0-9]+', 1, lv), 6) err_cod , SUBSTR(REGEXP_SUBSTR(msg, 'column "[^"]+', 1, lv), 9) err_col , SUBSTR(REGEXP_SUBSTR(msg, 'row [0-9]+', 1, lv), 5) err_row FROM t , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9) WHERE lv <= REGEXP_COUNT(msg, 'row') ORDER BY t_nm, lv ;
죄송하지만 1가지만 더 문의드리고 싶습니다
결과에서 해당하는 데이터(메시지 속성)도 출력하고 싶은데 잘 안되어서요..
예를 들면 아래와 같습니다
테이블명 | 엔터티명 | 오류코드 | 오류컬럼 | 오류 ROW | 메시지 |
TAB1 | 테이블1 | 123 | 컬럼1 | 101 | warring (code 123) for column "컬럼1" at row 101 |
TAB1 | 테이블1 | 123 | 컬럼1 | 102 | warring (code 123) for column "컬럼1" at row 102 |
TAB1 | 테이블1 | 123 | 컬럼3 | 103 | warring (code 123) for column "컬럼3" at row 103 |
WITH t AS ( SELECT 'TAB1' t_nm, '테이블1' e_nm, 'warring (code 123) for column "컬럼1" at row 101 warring (code 123) for column "컬럼1" at row 102 warring (code 123) for column "컬럼3" at row 103' msg FROM dual UNION ALL SELECT 'TAB2', '테이블2', 'error (code 123) for column "컬럼1" at row 102' FROM dual UNION ALL SELECT 'TAB3', '테이블3', 'warring (code 123) for column "컬럼2" at row 11 warring (code 123) for column "컬럼2" at row 12' FROM dual ) SELECT t_nm , e_nm , lv , RTRIM (REGEXP_SUBSTR(msg, '.+ \(', 1, lv), ' (') err_gbn , SUBSTR(REGEXP_SUBSTR(msg, 'code [0-9]+', 1, lv), 6) err_cod , SUBSTR(REGEXP_SUBSTR(msg, 'column "[^"]+', 1, lv), 9) err_col , SUBSTR(REGEXP_SUBSTR(msg, 'row [0-9]+', 1, lv), 5) err_row , REGEXP_SUBSTR(msg, '.+', 1, lv) msg FROM t , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9) WHERE lv <= REGEXP_COUNT(msg, 'row') ORDER BY t_nm, lv ;