오류 - 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
'programing' 카테고리의 다른 글
| Entity Framework 6에서 아래 SELECT 문에 NOLOCK 사용 안 함 (0) | 2023.07.07 |
|---|---|
| "델타를 해결하고 있다"고 표시될 때 깃은 무엇을 하고 있습니까? (0) | 2023.07.02 |
| Oracle에 CASE 문이 있는 조건부 WHERE 절 (0) | 2023.07.02 |
| 기본적으로 모든 URL에 대한 액세스를 거부하는 방법은 무엇입니까? (0) | 2023.07.02 |
| 지원되지 않는 키워드:메타데이터 (0) | 2023.07.02 |