펑션을 써서 뷰테이블을 만들어야 할지 쿼리로 뷰테이블을 생성이 가능 할지
궁금하여 문의드립니다.
CLOB 형태의 컬럼에
예) test ="123,5896,23" 형태의 문자열이 다른 문자열과 포함되어 다수 등록이 되어잇는데
뷰테이블 형태로
a
123
5896
23
위의 row 형태로 뷰테이블 생성이 가능 할지 문의드립니다.
펑션을 써야 하는지 아니면 쿼리로 가능 한지 문의드리며
어떤 함수를 써야 하는지 조언 주시면 찾아서 테스트 해보겟습니다.
감사합니다.
로우가 여러게 있을때는 어떻게 표현되나요?
row가 여러개 잇을때도 뽑아내서 잘라서 저런식에 값 = row 형태로 표현해야 합니다.
예) test = "123,456,7,8,9," free everbody test = "1,2,3,4,5,"
a
123
456
7
8
9
1
2
3
4
5
예로 들어 주신게? 1행인가요? 2행인가요? 모호하네요.
1행의 자료안에 test="..." 형태의 문자열이 1개뿐인지? 여러개 가능한지?
예가 정확하게 말씀드리면
description="1234" test="4444,589,4567," description="123" test="3333,123,456,111"
이런식으로 값이 들어가잇고 디스크립션 뒤에 별칭은 다른이름으로 추가로 들어갈수 잇고 test="값,값,값," 형태가 1개일수도잇고 여러개일수도있습니다.
test="값,값,값,", = test="4444,589,4567,"
test="값,값,값,값", = test="3333,123,456,111"
제가 row 형태로 하고싶은게
test="뒤에 값,값,값,
4444
589
4567
3333
123
456
111
입니다.
이런형태이고 중복되서 표현되도 상관은업습니다.
WITH t AS
(
SELECT 1 pk, TO_CLOB('description="1234" test="4444,589,4567," description="123" test="3333,123,456,111"') v FROM dual
UNION ALL SELECT 2, TO_CLOB('test="1,2,3"') FROM dual
)
SELECT pk
, lv
, rn
, REGEXP_SUBSTR(x, '[^",]+', 1, rn) x
FROM (SELECT pk
, lv
, SUBSTR(REGEXP_SUBSTR(v, 'test="[^"]+', 1, lv), 7) x
FROM t
, (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9)
WHERE lv <= REGEXP_COUNT(v, 'test="')
)
, (SELECT ROWNUM rn FROM dual CONNECT BY LEVEL <= 9)
WHERE rn <= REGEXP_COUNT(x, '[^",]+')
ORDER BY pk, lv, rn
;
다른 문장들 사이에 끼어 있는 test="1,2,3" 형태만 추출하는 쿼리입니다.
제 생각에는 요구사항에 부합하는 듯 한데요? 혹시 아닌가요?
혹 description="1234" test="4444,589,4567," 처럼의 형태가 아닌 다른 문장들 사이에 끼어 잇는값이라면 해당부분을 추출하기 위해선 function을 만들어서 뽑아내는것이 더 바람직 하겟죠?
죄송합니다 제가 대입을 안해봣네요....ㅠㅠ 정말 감사합니다ㅠ