programing

오류 - ORA-22835: 버퍼가 너무 작아서 CLOB에서 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다.

elecom 2023. 7. 2. 19:03
반응형

오류 - ORA-22835: 버퍼가 너무 작아서 CLOB에서 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다.

나는 읽으려고 시도하고 있습니다.BLOB메시지를 표시하고 절차 중 하나에서 변수로 표시하지만 아래 오류가 발생합니다.

오류 - ORA-22835: CLOB에서 CHAR로 또는 BLOB에서 RAW로 변환하기에는 버퍼가 너무 작습니다(실제: 9923, 최대: 2000).

제가 구글 검색을 해봤는데, 그것을 다듬을 수 있는 제안을 찾았습니다.BLOB아래와 같이 메시지를 보내지만, 저는 오히려 전체를 표시하고 싶습니다.BLOB메시지를 문자열로 지정합니다.

UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(variable_name,2000,1)) 

전체 메시지를 표시하려면 어떻게 해야 합니까?데이터베이스 또는 절차 수준에서 변경할 수 있는 설정이 있습니까?

이 작업은 다음에 설명된 옵션을 사용하여 수행되었습니다.

http://www.dba-oracle.com/t_convert_blob_varchar_datatype.htm

문자열을 트리밍하는 대신 DBMS_LOB.GETLENGTH()를 사용해 보십시오.

버퍼 문제는 다음을 참조하여 해결할 수 있습니다.BLOB값을 청크 단위로 지정합니다.이를 위해 여기서 제안하는 UDF(사용자 정의 함수)를 정의할 수 있습니다.다음 UDF는 다음을 읽습니다.BLOB한 번에 하나의 청크를 입력하고 변환합니다.VARCHAR2결과를 연속적으로 추가하여 결과를 다음과 같이 반환합니다.CLOB:

CREATE OR REPLACE FUNCTION VC2CLOB_FROM_BLOB(B BLOB)
RETURN CLOB IS
    c CLOB;
    n NUMBER;
BEGIN
    IF (b IS NULL) THEN 
        RETURN NULL;
    END IF;
    IF (LENGTH(b) = 0) THEN
        RETURN EMPTY_CLOB();
    END IF;
    DBMS_LOB.CREATETEMPORARY(c, TRUE);
    n := 1;
    WHILE (n + 32767 <= LENGTH(b)) LOOP
        DBMS_LOB.WRITEAPPEND(c, 32767, UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(b, 32767, n)));
        n := n + 32767;
    END LOOP;
    DBMS_LOB.WRITEAPPEND(c, LENGTH(b) - n + 1, UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(b, LENGTH(b) - n + 1, n)));
    RETURN c;
END;
/

정의한 후에는 간단히 다음과 같이 부를 수 있습니다.

SELECT VC2CLOB_FROM_BLOB(variable_name);

내 문제에 매력적으로 작용했습니다.

언급URL : https://stackoverflow.com/questions/25518780/error-ora-22835-buffer-too-small-for-clob-to-char-or-blob-to-raw-conversion

반응형