Skip to the content.

ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: %s, maximum: %s)

설정된 버퍼 값보다 더 큰 값을 들고오려함

  1. 읽을 바이트를 제한해서 읽기
     SELECT DBMS_LOB.SUBSTR(lob_column, length, offset) FROM table_name;
    

    4000 바이트보다 크다면 오프셋을 사용해 나눠서 취득할 수 밖에 없음 (PL/SQL일 경우 32767 바이트까지)

    • 멀티 바이트 문자라면 자를 때 문제가 있을 수 있기 때문에 서버단에서 처리하도록 해야함
        public String subStrByte(String str, int cutlen) {
            if(!str.isEmpty()) {
                str = str.trim();
      
                if(str.getBytes().length <= cutlen)
                    return str;
      
                else {
                    StringBuffer sbStr = new StringBuffer(cutlen);
                    int iCnt = 0;
      
                    for(char ch: str.toCharArray()) {
                        iCnt += String.valueOf(ch).getBytes().length;
      
                        if(iCnt > cutlen)
                            break;
      
                        sbStr.append(ch);
                    }
                    return sbStr.toString();
                }
            } else
                return "";
        }