分塊讀取Blob欄位資料 Oracle

2022-04-02 21:01:13 字數 812 閱讀 3224

試過了mssql的分塊讀取blob欄位,又嘗試在oracle下完成,發現還是可行的。

首先建立乙個儲存過程:

create or replace procedure pro_get_blob(

i_pkgid in integer,    --檔案id

i_mount in integer,   --複製資料數量(byte)

i_offset in integer,  --起始位置

b_result in out blob) --返還結果

is b_temp blob;

begin

--將blob資料讀取到變數,其實是傳遞了乙個指標

select file_data into b_temp

from t_sys_pkg_file

where pkg_id = i_pkgid;

--從blob中讀取所需要的資料,並返還給引數

dbms_lob.copy(b_result,b_temp, i_mount,1, i_offset);

end pro_get_blob;

其核心就是利用dbms_lob函式進行處理,在將資料庫blob欄位讀取到blob變數時,應該是傳遞的資料指標,而不是具體的資料,用乙個47m的檔案進行反覆讀寫過程,也沒有發現oracle記憶體發生多大變化。這樣一來無論是記憶體還是cpu占用都非常小。如下圖:

在客戶端執行儲存過程,讀取返回引數的值,實現對blob欄位的分塊獲取。

分塊讀取Blob欄位資料 MSSQL

mssql中提供了乙個功能,能夠分塊讀取blob欄位中的資料,寫了乙個儲存過程 如下 create procedure pro get file data pkg id int,ver varchar 50 start int,count int as begin 定義指標變數,必須為varbina...

BLOB欄位資料讀取

因為開發的時候公司的專案,所以只能說明不能截圖了,在這裡請大家諒解。blob這個字段,首先是存大資料的,本人倒是不建議在資料庫中存入那麼大的資料,影響伺服器效能。而且如果表沒有採用分布儲存,沒有考慮維護,一段時間就會很大,本人一點見解,表大小超過1g的容量時候,明顯影響資料讀取速度。這個扯的有點遠了...

顯示table欄位資料

select case when a.colorder 1 then d.name else end 表名,a.colorder 字段序號,a.name 欄位名,case when columnproperty a.id,a.name,isidentity 1 then else end 標識,ca...