오라클 4000자 이상 select - olakeul 4000ja isang select

에러 메시지::

ORA-22835: 버퍼가 너무 작아 CLOB를 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다(실제: 4467, 최대: 4000)

SELECT
  to_char(
  SDE.ST_ASTEXT(b.SHAPE)
  )
FROM DHT_ROBD_CN a
INNER JOIN DHL_BULD_AS b ON a.BLD_IDN = b.BLD_IDN
WHERE
  1!=1
  or a.ROM_IDN ='1111'

ST_GEOMETRY 를 이용하여 공간쿼리중 shape 필드를 wkt로 변환하던 도중 4000 자 이상오류 발생...

CLOB으로 변환 후 4000자씩 끊어서 쿼리해 오고 프로그램에서 붙여서 사용하는 것으로 결정..

2000만자가 안넘는다는 가정하게 꼼수로 처리.. 넘는다면 컬럼을 더 붙여야 할 듯...

암튼 4000자가 넘는 문자열을 

TO_CLOB으로 변환 후 dbms_lob.substr(CLOB컬러,가져올문자수,시작위치)로 4000개씩 끊어서 가져온 후 프로그램에서 붙여서 사용.

올바른 사용법인지는 잘 모르겠음.ㅋㅋ

SELECT 
   TO_CHAR(dbms_lob.substr(A.WKT,4000,1) )  AS TEST1,
   TO_CHAR(dbms_lob.substr(A.WKT,8000,4001) ) AS TEXT2,
   TO_CHAR(dbms_lob.substr(A.WKT,12000,84001) ) AS TEXT3,
   TO_CHAR(dbms_lob.substr(A.WKT,16000,12001) ) AS TEXT4,
   TO_CHAR(dbms_lob.substr(A.WKT,20000,16001) ) AS TEXT5
FROM
(
SELECT
  TO_CLOB(   SDE.ST_ASTEXT(b.SHAPE)  ) AS WKT      
FROM DHT_ROBD_CN a
INNER JOIN DHL_BULD_AS b ON a.BLD_IDN = b.BLD_IDN
WHERE
  1!=1
  or a.ROM_IDN ='1111'
  ) A
  

오라클 4000자 이상일때 처리 방법

ⓞRACLEⓞ

2013. 8. 12. 11:39

//nhkim1227.blog.me/30173808770 <input title="URL 복사" class="copyTargetUrl" style="display:none;" type="text" alt="url" value="//nhkim1227.blog.me/30173808770" />

1. 장애 메서지 : ORA-01489: 문자열 연결의 결과가 너무 깁니다 

2. 원인 : VARCHAR2의 최대 칼럼값은 4000 입니다.
     - 8.1.6 인 경우 : VARCHAR2의 4000 보다 큰 경우 문자를 자동으로 잘리고 결과을 보여준다
     - 10.2.0.3인 경우 : VARCHAR2의 4000 보다 큰 경우 ORA-01489를 장애 메세지를 출력한다.

     - 사용 경우 : 검색엔진 등 ETT 시 해당 칼럼을 결합하여 데이터를 추출 할 때 발생함

     
3. 해결방법 :  VARCHAR2의 데이터를 결합할 때  CLOB 형태로 변경하여 처리함

  
 예제)  MAX(DECODE(MOD(ROWNUM,6),0,explain_note,'')) || MAX(DECODE(MOD(ROWNUM,6),0,explain_note,''))
   변경==> TO_CLOB(MAX(DECODE(MOD(ROWNUM,6),0,explain_note,'')) )|| TO_CLOB(MAX(DECODE(MOD                 

              (ROWNUM,6),0,explain_note,'')))
 

 뷰생성의 예제 : 프로그램에서 VARCHAR2를 CLOB처리하여 변경 필요

  SELECT TO_CLOB(MAX(DECODE(MOD(ROWNUM, 6), 0, explain_note, '')))
    || TO_CLOB(MAX(DECODE(MOD(ROWNUM, 6), 1, explain_note, '')))
    || TO_CLOB(MAX(DECODE(MOD(ROWNUM, 6), 2, explain_note, '')))
    || TO_CLOB(MAX(DECODE(MOD(ROWNUM, 6), 3, explain_note, '')))
    || TO_CLOB(MAX(DECODE(MOD(ROWNUM, 6), 4, explain_note, '')))
    || TO_CLOB(MAX(DECODE(MOD(ROWNUM, 6), 5, explain_note, '')))
    FROM TEXPLAIN
    WHERE (explain_code >= '044' AND explain_code <= '052') AND explain_code <> '045' AND explain_code <> '046'

    AND explain_code <> '051' AND item_code = C.item_code) dscr_text,

출처: //cafe.naver.com/dbahit.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=68

에러 메시지::

ORA-22835: 버퍼가 너무 작아 CLOB를 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다(실제: 4467, 최대: 4000)

SELECT
  to_char(
  SDE.ST_ASTEXT(b.SHAPE)
  )
FROM DHT_ROBD_CN a
INNER JOIN DHL_BULD_AS b ON a.BLD_IDN = b.BLD_IDN
WHERE
  1!=1
  or a.ROM_IDN ='1111'

ST_GEOMETRY 를 이용하여 공간쿼리중 shape 필드를 wkt로 변환하던 도중 4000 자 이상오류 발생...

CLOB으로 변환 후 4000자씩 끊어서 쿼리해 오고 프로그램에서 붙여서 사용하는 것으로 결정..

2000만자가 안넘는다는 가정하게 꼼수로 처리.. 넘는다면 컬럼을 더 붙여야 할 듯...

암튼 4000자가 넘는 문자열을

TO_CLOB으로 변환 후 dbms_lob.substr(CLOB컬러,가져올문자수,시작위치)로 4000개씩 끊어서 가져온 후 프로그램에서 붙여서 사용.

올바른 사용법인지는 잘 모르겠음.ㅋㅋ

SELECT 
   TO_CHAR(dbms_lob.substr(A.WKT,4000,1) )  AS TEST1,
   TO_CHAR(dbms_lob.substr(A.WKT,8000,4001) ) AS TEXT2,
   TO_CHAR(dbms_lob.substr(A.WKT,12000,84001) ) AS TEXT3,
   TO_CHAR(dbms_lob.substr(A.WKT,16000,12001) ) AS TEXT4,
   TO_CHAR(dbms_lob.substr(A.WKT,20000,16001) ) AS TEXT5
FROM
(
SELECT
  TO_CLOB(   SDE.ST_ASTEXT(b.SHAPE)  ) AS WKT      
FROM DHT_ROBD_CN a
INNER JOIN DHL_BULD_AS b ON a.BLD_IDN = b.BLD_IDN
WHERE
  1!=1
  or a.ROM_IDN ='1111'
  ) A
  

Toplist

최신 우편물

태그