테이터 길이에서 걸리네요 해결좀 해주세요 흑흑 0 3 1,710

by 손님 오라클 길이제한 [2009.07.31 14:45:14]


아래쿼리는 2000바이트까지 밖에 합쳐지지가 않네요

4000바이트까지 들어가야하는데 방법 없을까요? ㅜㅜ

SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') AS TRSC_DT
     , '000' AS INST_CD
     , 'FL2213' AS BACH_FILE_NM
     , BLK_NO
     , SEQ_NO
     , REC_CNT
     , LENGTHB(DETL_DATE) AS DETL_DATE_LEN
     , DETL_DATE AS DETL_DATE
FROM     
(
    SELECT CEIL(SEQ_NO/100) BLK_NO
         , DECODE(CEIL(SEQ_NO/100),'1', SEQ_NO, (SEQ_NO - 100*(CEIL(SEQ_NO/100)-1))) AS SEQ_NO
         , MAX(rn) REC_CNT
         , MAX(REPLACE(SYS_CONNECT_BY_PATH(DETL_DATE,','),',','')) DETL_DATE
    FROM
    (
        SELECT CEIL(ROWNUM/25) AS SEQ_NO
             , TT     AS DETL_DATE
             , ROW_NUMBER() OVER(PARTITION BY CEIL(ROWNUM/25) ORDER BY ROWNUM) rn
        FROM
        (
            SELECT Rpad('HEADER',80,' ') AS TT FROM DUAL
            UNION ALL
            SELECT lpad('DATA',80,' ') AS TT FROM DUAL CONNECT BY LEVEL <= 1000
            UNION ALL
            SELECT lpad('TRAILER',80,' ') AS TT FROM DUAL
        )
    )
    START WITH rn = 1
    CONNECT BY PRIOR SEQ_NO = SEQ_NO
           AND PRIOR rn = rn - 1
    GROUP BY SEQ_NO
)

by 마농 [2009.07.31 15:06:13]
어차피 문자열 처리는 4000 바이트를 넘을 수 없습니다.
sys_connect_by_path를 이용해 문자열을 연결하시려는 것 같은데요.
구분자인 컴마까지 계산한다면 순수 데이터만 4000바이트를 연결할수는 없지요.
오라클 버전이 10G라면 XMLAGG를 이용해 보세요.
구분자가 없어도 연결이 되니 4000바이트까지는 가능하겠네요.

by 손님 [2009.07.31 15:10:22]
답변감사합니다^^
XMLAGG
이건 지원이 안된다고 해서 저렇게 해봤는데 그것도 2000바이트 이상 안들어가네요
컴마는 replace에서 다 짤라버리긴 했는데...

by 마농 [2009.07.31 15:20:14]
2000바이트까지만 연결된다는 것은 이해가 안가네요.
컴마 포함 4000바이트이니 2000바이트 이상도 어느정도는 가능하리라 생각됩니다.
replace는 이미 문자열 연결한 뒤에 하는 것이니 에러엔 소용없구요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입