ブロブをブロブにエンコードする必要があります。私はいくつかの検索を行ってきたと同じ機能が示唆されているように見える:l_step
の最大サイズを決定するもの、base64ブロブをブロブにエンコードする
CREATE OR REPLACE FUNCTION base64encode(p_blob IN BLOB)
RETURN CLOB
-- -----------------------------------------------------------------------------------
-- File Name : https://oracle-base.com/dba/miscellaneous/base64encode.sql
-- Author : Tim Hall
-- Description : Encodes a BLOB into a Base64 CLOB.
-- Last Modified: 09/11/2011
-- -----------------------------------------------------------------------------------
IS
l_clob CLOB;
l_step PLS_INTEGER := 12000; -- make sure you set a multiple of 3 not higher than 24573
BEGIN
FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_blob) - 1)/l_step) LOOP
l_clob := l_clob || UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_blob, l_step, i * l_step + 1)));
END LOOP;
RETURN l_clob;
END;
/
私の質問はありますか?私は24573に設定する試みたと私は、次のエラーが表示されます。
ORA-06502: PL/SQL: numeric or value error: raw variable length too long, ORA-06512: at "SYS.UTL_ENCODE"
私は23808に低く、それを設定しようと、それが動作するように見えました。
明らかに、 'UTL_RAW.CAST_TO_VARCHAR2'関数は32767バイトで制限された' VARCHAR2'データ型を返します。 'UTL_ENCODE.base64_encode'は純粋なASCIIを返すので、制限は32767文字に等しい。マルチバイト文字変換は適用しないでください。 –