PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法

所属分类: 数据库 / oracle 阅读数: 1639
收藏 0 赞 0 分享
首先,创建一个存储过程 get_clob:
t_name:要查询的表名;f_name:要查询的字段名;u_id:表的主键,查询条件;l_pos:截取的开始位置; l_amount :截取长度;
CREATE OR REPLACE PROCEDURE get_clob(t_name in varchar2, f_name in varchar, u_id in integer, l_pos in integer, l_amount in BINARY_INTEGER, ReturnValue out varchar2) is
rule_xml clob;
l_buffer varchar2(3999);
l_amount_ BINARY_INTEGER;
begin
execute immediate 'select ' ||f_name|| ' from ' ||t_name|| ' where id=:1' into rule_xml using u_id;
l_amount_:=l_amount;
DBMS_LOB.read(rule_xml, l_amount_, l_pos, l_buffer);
ReturnValue := l_buffer;
end get_clob;
然后是php的处理程序:
$content = "";
$num = 0;//clob字段长度
$stmt = $oracle->prepare("select length(content) as num from test where id = $id");
if ($stmt->execute()) { //zjh为查询的条件
$row = $stmt->fetch();
$num = $row['NUM'];
}
$start = 1;//初始化开始位置
$len = 2500;//截取长度
$t_name = 'test';//操作表名
$f_name = 'content';//需要查询的clob字段名
while ($start <= $num){
$ret='';
$sql = "begin get_clob(?,?,?,?,?,?); end;";
$stmt = $oracle->prepare($sql);
$stmt->bindParam(1, $t_name, PDO::PARAM_STR, 100);
$stmt->bindParam(2, $f_name, PDO::PARAM_STR, 100);
$stmt->bindParam(3, $id, PDO::PARAM_STR, 100);
$stmt->bindParam(4, $start, PDO::PARAM_STR, 100);
$stmt->bindParam(5, $len, PDO::PARAM_STR, 100);
$stmt->bindParam(6, $ret, PDO::PARAM_STR, 5000);
$stmt->execute();
$content .= $ret;
$start=$start+$len;
}
$oracle = null;
以上就是完整的解决办法,这个方法不是俺的首创,做过pb项目的人大多数应该比较熟悉这种操作。
php操作Oracle的资料网上还是比较少的,能解决问题的就更不多了,发出来跟大家分享一下,肯定还有其他比较好的解决办法,欢迎跟大家一起探讨。
更多精彩内容其他人还在看

Oracle安装监听器错误的解决方法

小白在搭载环境时,经常遇到的一个问题就是数据库安装错误,其中Oracle监听器的错误是经常出现的一个错误,搞不好还要重装系统.下面我就总结一下解决监听器配置问题的三个方法. 一.删除监听器重新配置 在cmd命令栏,sercices.msc查看服务,找到Oracle监听器,停止... 查看详情
收藏 0 赞 0 分享

Oracle创建带有参数的视图代码介绍

在Oracle里,视图不像存储过程和函数一样,可以定义输入参数,但我们可以变个方式,使用程序包来实现 首先定义程序包: /* 按个人需要定义,我定义三个参数 ,因我项目程序需要,所以三个参数都是number ,当然可定义其它类型 但切记,第二个create 的参... 查看详情
收藏 0 赞 0 分享

Oracle分页查询性能优化代码详解

对于数据库中表的数据的 Web 显示,如果没有展示顺序的需要,而且因为满足条件的记录如此之多,就不得不对数据进行分页处理。常常用户并不是对所有数据都感兴趣的,或者大部分情况下,他们只看前几页。 通常有以下两种分页技术可供选择。 Select * from ( ... 查看详情
收藏 0 赞 0 分享

oracle 虚拟专用数据库详细介绍

所谓虚拟专用数据库(VPD)指的是,通过在数据库里进行配置,从而让不同的用户只能查看某个表里的部分数据。VPD分为以下两个级别。 行级别:在该级别下,可以控制某些用户只能查看到某些数据行。比如,对于销售数据表sales 来说,每个销售人员只能检索出他自己的销售数据,不能查... 查看详情
收藏 0 赞 0 分享

对于oracle对session进行跟踪的分析

跟踪 session 的活动,Oracle 提供了很多种手段,不仅可以对当前连接的 session 进行跟踪, 也可以对其他用户的 session 进行跟踪;通过对 trace 档的分析,不仅可以掌握该 session 的活动, 也可以找出这个 session 中的瓶颈所在,对 ... 查看详情
收藏 0 赞 0 分享

oracle 数据库启动阶段分析

Oracle Server主要由两部分组成:Instance 和Database 。Instance 是指一组后台进程/线程和一块共享内存区域,而 Database是指存储在磁盘上的一组物理文件。本文由数据库 如何启动入手。 数据库的启动 首先来分析一下数据库的启动过程,... 查看详情
收藏 0 赞 0 分享

Oracle EBS工具选项:关闭其他表单修改方法

Oracle EBS里 工具-关闭其他表单 如果被勾选上,用户在打开一个Form的时候,就会关闭其他的Form,保证只有一个Form存在。 如果想开启此选项,则可以通过下面两种方式 1)每个职责单独设置 增加菜单排除项:Menu Exclusions 功能... 查看详情
收藏 0 赞 0 分享

浅谈oracle SCN机制

SCN(System Change Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。 在理解SCN之前,我们先看下ora... 查看详情
收藏 0 赞 0 分享

Oracle SCN与检查点详解

1.SCN 的定义 SCN(System Change Number ),也就是通常所说的系统改变号,是数据库中非常重要的 一个数据结构。 SCN 用以标识数据库在某个确切时刻提交的版本。在事务提交时,它被赋予一个惟一的 标识事务的SCN。SCN 同时被作为 Oracle... 查看详情
收藏 0 赞 0 分享

Oracle RMAN自动备份控制文件方法介绍

RMAN(Recovery Manager)是一种用于备份(backup)、还原(restore)和恢复(recover) 数据库的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Sp... 查看详情
收藏 0 赞 0 分享
查看更多