ORA-22835 緩沖區對於 CLOB 到 CHAR 轉換或 BLOB 到 RAW 轉換而言太小


在使用Oralce時,直接取出 CLOB 到 CHAR 轉換或 BLOB 到 RAW 轉換時,會出現ORA-22835的異常,以下是個人的解決方案

 

create or replace Function BlobToVarchar (Blob_In In Blob) Return clob
Is
V_Varchar Varchar2(32767);
V_Varchar1 Varchar2(32767);
V_Start Pls_Integer := 1;
V_Buffer Pls_Integer := 4000;
Begin

If Dbms_Lob.Getlength(Blob_In) Is Null Then
Return '';
End If;
V_Varchar1 := '';
--return to_char(Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer));
For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop
--當轉換出來的字符串亂碼時,可嘗試用注釋掉的函數
--V_Varchar := Utl_Raw.Cast_To_Varchar2(Utl_Raw.Convert(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'));
V_Varchar := Utl_Raw.Cast_To_Varchar2(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start));
V_Varchar1 := V_Varchar1 || V_Varchar;

V_Start := V_Start + V_Buffer;
End Loop;

Return V_Varchar1;

End ;

 

1.首先執行上面的函數,返回的是個clob

2將clob轉成varchar2
說白了 就是 to_char(Blob_To_Varchar(字段))
創建二個函數 然后就可以用了,如果說實現 數據庫里面大字段的批量替換還是比較方便

update DR_RPT_REPORT_DATASOURCE
set data_sql =
c2b(to_clob((select replace(Blob_To_Varchar(data_sql),'XXX','XXX') from DR_RPT_REPORT_DATASOURCE where data_id
='XXXX' ))) where data_id = '' ;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM