試過了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...