by 자이제시작이야 [SQL Query] [2017.12.08 14:46:42]
select A.key ,
-- (1) XMLAGG(XMLELEMENT(X, ' ', B.SENTENCE ) order by B.time).EXTRACT('//text()').GETSTRINGVAL() AS SENTENCE
-- (2) XMLAGG(XMLELEMENT(X,' ' , B.SENTENCE ) order by B.time).EXTRACT('//text()').GETCLOBVAL() AS SENTENCE
from A , B
where A.KEY = B.KEY
and A.DATE between '20161208' and '20171208'
group by A.KEY;
A테이블은 KEY, DATE, ID
B테이블은 KEY,
SENTENCE(한문장이 끝나면 다음문장은 다음행에 쌓이는 식),
TIME(시간이 아닌 SENTENCE 순서구분용) 가 있어요
A테이블
KEY DATE ID
abc110 20171110 hong
abc555 20170612 dong
: : :
B테이블
KEY SENTENCE TIME
abc110 안녕하세요 1
abc110 질문이 있어서 이렇게 글을 올립니다 2
abc110 친절한 답변 부탁드립니다 3
: : :
abc555 데이터베이스 공부하는 사람입니다 1
abc555 어렵지만 관심 가지고 하고 있습니다 2
abc555 도와주시면 감사하겠습니다 3
: : :
1년치의 데이터를 뽑아서 B테이블에 있는 SENTENCE의 행들을 하나의 열로 만들고 싶어서 해봤는데
(1)은 ORA-06502, ORA-06512 에러가 나고
(2)는 40자 제한에서 짤려요..
도와주세요~
2번 잘 되는데요?
with t as ( select 'abc110' key, '안녕하세요' sentence , 1 time from dual union all select 'abc110' key, '질문이 있어서 이렇게 글을 올립니다' sentence , 2 time from dual union all select 'abc110' key, '친절한 답변 부탁드립니다' sentence , 3 time from dual union all select 'abc110' key, '친절한 답변 부탁드립니다' sentence , 3 time from dual union all select 'abc110' key, '친절한 답변 부탁드립니다' sentence , 3 time from dual union all select 'abc110' key, '친절한 답변 부탁드립니다' sentence , 3 time from dual union all select 'abc110' key, '친절한 답변 부탁드립니다' sentence , 3 time from dual union all select 'abc110' key, '친절한 답변 부탁드립니다' sentence , 3 time from dual union all select 'abc110' key, '친절한 답변 부탁드립니다' sentence , 3 time from dual union all select 'abc555' key, '데이터베이스 공부하는 사람입니다' sentence , 1 time from dual union all select 'abc555' key, '어렵지만 관심 가지고 하고 있습니다' sentence , 2 time from dual union all select 'abc555' key, '도와주시면 감사하겠습니다' sentence , 3 time from dual ) select substr(xmlagg(xmlelement(x,' ' , sentence ) order by time).extract('//text()').getclobval(),2) as sentence from t group by key --결과 안녕하세요 질문이 있어서 이렇게 글을 올립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 데이터베이스 공부하는 사람입니다 어렵지만 관심 가지고 하고 있습니다 도와주시면 감사하겠습니다
SUBSTR(XMLAGG(XMLELEMENT(X,' ' , B.SENTENCE ) order by B.time).EXTRACT('//text()').GETCLOBVAL(),2) AS SENTENCE
이렇게 해봐도 저는 짤리네요...ㅠ
위에꺼 긁어서 orange for oracle에서 해봤는데
똑같이 짤리네요
그래서 getCLOBval 을 getSTRINGval로 했더니 안짤리고
안녕하세요 질문이 있어서 이렇게 글을 올립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다 친절한 답변 부탁드립니다
이렇게 나왔어요...
뭐가 잘못된걸까요..