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

首先,创建一个存储过程 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的资料网上还是比较少的,能解决问题的就更不多了,发出来跟大家分享一下,肯定还有其他比较好的解决办法,欢迎跟大家一起探讨。

时间: 2024-09-06 03:35:05

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

window.location.href中url中数据量太大时的解决方法

 这篇文章主要为大家介绍下window.location.href中url中数据量太大时的解决方法,需要的朋友可以参考下 先说一下今天遇到的问题   一个导出excel的处理,在按钮按下后需要传很大一个数据到后台,刚开始的做法如下: 代码如下: var actionUrlSetData = "****Action!exportDatas.action"+ "?now=" + new Date().getTime(); window.location.href= ac

mysql 数据量太大,怎么优化一下

问题描述 mysql 数据量太大,怎么优化一下 SELECT dir1.url from dir1 LEFT JOIN dir2 on dir2.url=dir1.url where dir2.id is null or dir1.md5<>dir2.md5 如题,此语句当数据量大的时候会宕机 求助大神帮我想想怎么优化一下 因为我不是做这个的,我只是在c语言一个程序中用到了 然后用我的程序的人说会很慢,而且cpu占用率高 求助帮我优化 解决方案 数据有多大?看看执行计划 找出瓶颈在那里. 解决

window.location.href中url中数据量太大时的解决方法_javascript技巧

先说一下今天遇到的问题 一个导出excel的处理,在按钮按下后需要传很大一个数据到后台,刚开始的做法如下: 复制代码 代码如下: var actionUrlSetData = "****Action!exportDatas.action"+ "?now=" + new Date().getTime();window.location.href= actionUrl + "&" + data; 上面的data就是一个很长的字符串. 这样在火

NPOI导出EXCEL 5万多条 数据量太大,内存爆炸,如何解决?

问题描述 导一个月的就报错502BadGateway错误了,如果导半个月数据少点就没问题:大神们有没有什么解决方案. 解决方案 解决方案二:不用NPOI用其它插件的导出,这个方案没法接收,因为要改太费时间了.解决方案三:在线等大神啊!解决方案四:我有一段代码,没试过大量数据的时候行不行,你试试DimmsAsNewSystem.IO.MemoryStreambook.Write(ms)Response.AddHeader("Content-Disposition",String.Form

数据库问题,一个sql数据库原来只有一张表,现在想分为多表。主要是数据库量太大。怎么效率才会高呢?

问题描述 关键问题是数据量太大,我想写个脚本按照表中某个字段分成十几张表,但是我试了下在转换10G的数据时就需要很长时间,更不要说50g的数据了.各位有什么好办法没有,指点下.脚本里面我是直接这样写的:select*intoEmailLogfromclientadwheredwTypeID1in(131329,132865,131331,132867)godeletefromclientadwheredwTypeID1in(131329,132865,131331,132867)goselect

数据量过大时数据库操作的处理

数据|数据库 随着"金盾工程"建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种.各部门.与此同时,应用系统体系的核心.系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量.那么,如何实现快速地从这些超大容量的数据库中提取数据(查询).分析.统计以及提取数据后进行数据分页已成为各地系统管理员和数据库管理员亟待解决的难题. 在以下的文章中,我将以"办公自动化"系统为例,探讨如何在

求一个合理算法,比较两个数据量较大的集合

问题描述 求一个合理算法,比较两个数据量较大的集合 现有listA,数据库B,A中的数据如果与B中不同(包含不存在的情况), 则将不同或不存在的数据记录到B中, 现在问题是,listA和数据库B都有大量数据, 求一个合理的比较二者数据的算法 解决方案 先排序再比较啊. 比较的时候: 如果 A[i] == B[j],继续下一个比较 A[i+1] 和 B[j+1]: 如果 A[i]<B[j].或者B没有可以比较的数,就是不存在: 如果 A[i]>B[j],继续下一个比较 A[i] 和 B[j+1]

控件-急急急!!!!vb程序数据量比较大时VSflexgrid设置数据源假死机怎样解决????

问题描述 急急急!!!!vb程序数据量比较大时VSflexgrid设置数据源假死机怎样解决???? 使用vsflexgrid控件查看数据,当数据量比较大时(超过十万行),设置vsflexgrid数据源时程序假死机,等待一段时间才有响应,求大神指点!!! 解决方案 .Redraw一共有三个取值: flexRDNone --不刷新数据,要手工刷新数据才会显示 flexRDDirect --立即装入所有的数据,你应该是设置成了这个,所以速度慢 flexRDBuffered --显示部分数据,这种速度最

我在客户端如何可以取得服务器端的最新数据(前10条),除了定时刷新的方法,还有别的方法吗?而且数据量较大,要保证速度。希望各位大侠、高手给写建议。

问题描述 我在客户端如何可以取得服务器端的最新数据(前10条),除了定时刷新的方法,还有别的方法吗?而且数据量较大,要保证速度.希望各位大侠.高手给写建议. 解决方案 解决方案二:ajax从服务器上每次只取20条即可速度上影响不大