FUNCTION sf_clobtoblob (i_data_cl CLOB)
RETURN BLOB
IS
v_out_bl BLOB;
clob_size NUMBER;
pos NUMBER;
charbuff VARCHAR2 (32767);
dbuffer RAW (32767);
v_readsize_nr NUMBER;
v_line_nr NUMBER;
BEGIN
DBMS_LOB.createtemporary (v_out_bl, TRUE, DBMS_LOB.call);
v_line_nr :=
GREATEST (65,
INSTR (i_data_cl, CHR (10)),
INSTR (i_data_cl, CHR (13)));
v_readsize_nr := FLOOR (32767 / v_line_nr) * v_line_nr;
clob_size := DBMS_LOB.getlength (i_data_cl);
pos := 1;
WHILE (pos < clob_size)
LOOP
DBMS_LOB.read (i_data_cl,
v_readsize_nr,
pos,
charbuff);
dbuffer :=
UTL_ENCODE.base64_decode (UTL_RAW.cast_to_raw (charbuff));
DBMS_LOB.writeappend (v_out_bl,
UTL_RAW.LENGTH (dbuffer),
dbuffer);
pos := pos + v_readsize_nr;
END LOOP;
RETURN v_out_bl;
END sf_clobtoblob;
Henüz yorum yapılmamış