试过了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字段数据(Oracle)的更多相关文章

  1. 分块读取Blob字段数据(MSSQL)

    MSSQL中提供了一个功能,能够分块读取Blob字段中的数据,写了一个存储过程代码如下: CREATE PROCEDURE PRO_GET_FILE_DATA     @PKG_ID INT,     ...

  2. C# 连接 Oracle,读取Blob字段数据,存到文件中去,包括pdf等等

    代码如下,记得引入Oracle的dll using System; using System.Collections.Generic; using System.ComponentModel; usi ...

  3. Java读取oracle数据库中blob字段数据文件保存到本地文件(转载)

    转自:https://www.cnblogs.com/forever2698/p/4747349.html package com.bo.test; import java.io.FileOutput ...

  4. FIREDAC保存ORACLE的BLOB字段数据

     FIREDAC默认识别ORACLE的BLOB字段为HUGEBLOB,需要将HBLOB映射为BLOB,才可以保存ORACLE的BLOB字段的数据.

  5. 插入与读取Blob类型数据

    BlobTest package com.aff.PreparedStatement; import java.io.File; import java.io.FileInputStream; imp ...

  6. Oracle数据库BLOB字段的存取

    述]     Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cur ...

  7. C#读取Mysql blob字段 (转帖)

    http://blog.csdn.net/config_man/article/details/6123191 开发环境:Windows XP Professional SP3.VS2008.Winf ...

  8. Java实现打包下载BLOB字段中的文件

    概述 web项目的文件打包下载实现:servlet接收请求,spring工具类访问数据库及简化大字段内容获取,org.apache.tools.zip打包. 必要提醒:当前总结是继Java实现下载BL ...

  9. Java读取lob格式数据

    想要读出lob里面的图片数据,就要确认clob里面存储的是什么,一般情况下存储的base64的串串.所以就以base64为例,而Blob里面存储的大部分是图片数据,但也有xml内容数据. 1查询lob ...

随机推荐

  1. struts2实现XML异步交互

    异步交互,在不用重新提交整个页面的情况下可以实现页面局部信息与服务器的交互.在编写异步交互时需要用到一个架包:dom4j,下载地址为:https://dom4j.github.io/ 下面通过例子说明 ...

  2. CSS border-radius边框圆角

    在CSS3中提供了对边框进行圆角设定的支持,可对边框1~4个角进行圆角样式设置. 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 ...

  3. SQL语句提取某列中的HTML文本内容。或者说怎么用SQL语句去除所有HTML标签

    CREATE FUNCTION [dbo].[f_trimstr] ( @str NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) AS     BEGIN          ...

  4. <3>Cocos Creator编辑器基础

    Cocos Creator编辑器界面主要窗口包含如下: * 资源管理器窗口 * 场景编辑器窗口 * 层级管理器窗口 * 属性检查器窗口 * 上方功能按钮 * 偏好设置 * 串口输出 * 预览和构建 1 ...

  5. chromedriver 全屏 翻页 错误

    from selenium import webdriver from selenium.common.exceptions import TimeoutException, StaleElement ...

  6. C++11 Function 使用场景

    [1]场景分析 在一个函数内部,可能会多次用到某一段代码,一般情况是把这段用到次数较多的代码封装成一个函数. 但是,如果这段代码仅仅只在这个函数中有使用,这时封装成函数显得既麻烦又冗赘. 那么,有没有 ...

  7. 为什么C++函数形参默认值从最末一个赋值?

    [1]函数调用时形参的压栈顺序 1.示例代码如下(VS2010): #include <iostream> using namespace std; ); void fun(int a, ...

  8. 输出列表为字符串,并在最后一个值前加上and 4.10.1

    逗号代码: def test4(lis): str1='' for i in range(len(lis)-1): str1+=(str(val[i])+', ') str1+=('and '+str ...

  9. mysql 问题:wait_timeout

    1,show global variables like 'wait_timeout'; 查询'wait_timeout' 默认是8天即28800秒 2,修改 windows 安装目录下的my.ini ...

  10. python os.path.splitext()

    # Split the file extension 可以把扩展名获取出来