oracle將blob轉為varchar2


因為varchar2最大長度為4000,所以不能直接將blob轉為varchar2,這里通過函數將blob返回為table格式來實現:

1、創建兩個新的type,用於函數返回

create or replace type obj_table as object
(
  name varchar2(2000)
);
create or replace type t_table is table of obj_table

2、創建blob轉varchar2的函數

CREATE OR REPLACE
Function Blob_To_Varchar (id In VARCHAR2) Return t_table
as
  rs t_table:= t_table();-- 定義上面創建的類型
  Blob_In blob;
    V_Varchar Varchar2(2000);
    V_Start Pls_Integer := 1;
    V_Buffer Pls_Integer := 2000;
Begin
 
    SELECT COLIMN_BLOB_NAME into Blob_In FROM table a WHERE a.id= id; -- 根據id查詢blob所在的表
    For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop -- 遍歷blob
        --當轉換出來的字符串亂碼時,可嘗試用注釋掉的函數
        --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));
        rs.extend;-- 擴展已知的數組空間
	rs(rs.count) := obj_table(V_Varchar);-- 往上面創建obj_table中寫入數據
	V_Start := V_Start + V_Buffer;
    End Loop;
    Return rs;
End Blob_To_Varchar;

3、查詢結果

select * from table(Blob_To_Varchar(id))

執行上面的語句,可獲取到對應的blob對應的varchar

 


免責聲明!

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



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