database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 35196 게시물 읽기
No. 35196
행을 열로 바꾸는데 문제가 생겼습니다 ㅠㅠ
작성자
임형진(zenucise)
작성일
2009-02-06 12:36ⓒ
2009-02-06 13:18ⓜ
조회수
12,377

방법 1 


SELECT XMLAGG(XMLELEMENT(a,ctrt_id,',')) CTRT_ID-- ORDER BY CTRT_ID)

  FROM (SELECT TC.CTRT_ID AS CTRT_ID

FROM TBB_RSS_CT         TRC

     ,TBB_TGT_P          TT

     ,TBB_CTRT_P   TC

WHERE  TRC.RSS_SEQ_NO IN ('1000045669')

AND  TT.BILL_SEQ_NO = TRC.BILL_SEQ_NO

AND  TT.BILL_YYMM   = TRC.BILL_YYMM

AND  TT.BILL_SEQ_NO = TC.BILL_SEQ_NO

AND  TT.BILL_YYMM   = TC.BILL_YYMM

)


위의 쿼리에서 , 이값을 없애주기 위해서


SELECT replace(ctrt_id, ',', ''''||',')

FROM

(

SELECT replace(ctrt_id, '', '''') CTRT_ID

FROM

(

SELECT XMLAGG(XMLELEMENT(a,ctrt_id,',')) CTRT_ID-- ORDER BY CTRT_ID)

  FROM (SELECT TC.CTRT_ID AS CTRT_ID

FROM TBB_RSS_CT         TRC

     ,TBB_TGT_P          TT

     ,TBB_CTRT_P   TC

WHERE  TRC.RSS_SEQ_NO IN ('1000045669')

AND  TT.BILL_SEQ_NO = TRC.BILL_SEQ_NO

AND  TT.BILL_YYMM   = TRC.BILL_YYMM

AND  TT.BILL_SEQ_NO = TC.BILL_SEQ_NO

AND  TT.BILL_YYMM   = TC.BILL_YYMM

AND ROWNUM < 200)

)

)


이런식으로 했더니  replace가 최고 길이가 varchar2 4000바이트인지 ORA-19011: 문자열 버퍼가 너무 작음


이렇게 뜨는데요 어떻게 방법이 없을까요?


방법 2


SELECT  MAX(SYS_CONNECT_BY_PATH(CTRT_ID, ','))

FROM (

  SELECT  ROWNUM CNT,

    CTRT_ID

  FROM

    (

    SELECT --TT.BILL_YYMM AS BILL_YYMM,

--      TT.BILL_SEQ_NO AS BILL_SEQ_NO,

      TC.CTRT_ID AS CTRT_ID

    FROM TBB_RSS_CT         TRC                          

         ,TBB_TGT_P          TT                           

         ,TBB_CTRT_P   TC

    WHERE  TRC.RSS_SEQ_NO IN ('1000045669')

    AND  TT.BILL_SEQ_NO = TRC.BILL_SEQ_NO

    AND  TT.BILL_YYMM   = TRC.BILL_YYMM

    AND  TT.BILL_SEQ_NO = TC.BILL_SEQ_NO

    AND  TT.BILL_YYMM   = TC.BILL_YYMM

    ORDER BY CTRT_ID

    )

  ) X

START WITH CNT = 1

CONNECT BY PRIOR CNT = CNT - 1

AND PRIOR CNT = CNT-1


이 방법으로 했을때도 ORA-01489: 문자열 연결의 결과가 너무 깁니다


이러한 오류가 뜹니다..


해결방법이 없을까요 ㅠㅠ


제가 초보라서 그런데 많은 도움 부탁드리겠습니다.


이 글에 대한 댓글이 총 4건 있습니다.
처음부터 컴마를 넣지 않으면 되는것 아닌가요?
-- XMLAGG(XMLELEMENT(a,ctrt_id,',')) CTRT_ID
   XMLAGG(XMLELEMENT(a,ctrt_id))     CTRT_ID
마농(manon94)님이 2009-02-06 13:27에 작성한 댓글입니다.

답변 감사드립니다.

여기서 문제는 CTRT_ID를 열로 했을때 'CTRT_ID01','CTRT_ID01','CTRT_ID01','CTRT_ID01','CTRT_ID01','~~~~~~~

이런식으로 만들고 싶어서 입니다.

도와주세요 ㅠㅠ

임형진(zenucise)님이 2009-02-06 13:37에 작성한 댓글입니다.

4,000 Byte가 넘어간다면 문자열로는 방법이 없을걸요?

마농(manon94)님이 2009-02-06 14:26에 작성한 댓글입니다.

그렇군요 ㅠㅠ

답변 감사합니다 ..

오늘 하루도 좋은 하루 되세요~!

임형진(zenucise)님이 2009-02-06 15:16에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
35199특정 행에서 중복된 이름을 제거... [3]
궁금
2009-02-08
4302
35198날짜로 구성되어 있는 필드에서 월별로 인덱스를 뽑아내고 싶습니다. [1]
shadow
2009-02-08
4158
35197count 후 sum하기... [2]
박건희
2009-02-06
4964
35196행을 열로 바꾸는데 문제가 생겼습니다 ㅠㅠ [4]
임형진
2009-02-06
12377
35195row migration, row chained 와 테이블 사이즈가 상관있나요? [1]
초보
2009-02-06
4344
35194오라클 VIEW 질문입니다. [2]
REDMAN
2009-02-05
4854
35193[질문]2개 테이블 조인해서 페이징 처리시 쿼리 속도 개선 문제 [1]
버드
2009-02-05
6130
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2025 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v18.1로 자료를 관리합니다