22835

===

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

  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 "";
      }