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

2016-02-19 09:26 39 1 收藏

有了下面这个PDO取Oracle lob大字段当数据量太大无法取出的问题的解决办法教程,不懂PDO取Oracle lob大字段当数据量太大无法取出的问题的解决办法的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - 编程语言 】

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

来源:http://www.tulaoshi.com/n/20160219/1590773.html

延伸阅读
标签: Web开发
最近公司内部的architecture组正在热烈讨论AJAX,最后难免会谈到如何跨域这个问题,因为从AJAX诞生那天起,XMLHttprequest对象在firefox下不能跨域请求的问题就一直存在,等待浏览器们去解决这个问题显然不太现实,聪明的Web开发人员们早就想了一系列的方法来解决这个问题,下面列举两个比较不错的方法: 1. 使用中间层过渡的方式: ...
标签: Web开发
好多新手,对于保存的js无法运行,或直接就是用记事本之类的软件打开,而我们需要看到的是执行效果,我们经常用记事本或eidtplus手写的同志,基本上都是让js后缀的脚本用文本打开,如果突然想让它执行,怎么办呢,方法呢有两个 1、比较根本的解决就是:例如run.js,我们直接在这个文件上右键-》调出打开方式--选择程序--浏览到系统盘(假如是c...
标签: 电脑入门
建议您在出现此提示时点击提示窗口下方的"疑难解答",此时会弹出用户本地网络检测结果.分别会自动检测用户当地的IP地址、默认网关、DNS、代理服务器、端口是否正常.若有某一项或某几项为不正常状态则会标红并在前方有红X.     至此,您可以尝试让系统自动修改(可咨询当地网络服务商操作方法。如果是电信网络,可以...
标签: 电脑入门
遇到了一个问题,蓝牙音箱可以搜索到但是无法连接。 原因分析: 1、系统问题 2、设置错误 解决方案: 一、手机或者平板能够搜索到蓝牙音箱,但选择后提示无法连接 1.1 把蓝牙音箱连接到其他设备上,看音箱是否有问题。 1.2 查看最近是否安装了蓝牙方面的软件,如果有,建议卸载。 1.3 把手机恢复出厂设置。 1.4 重新刷机。 二、笔记本...
标签: 电脑入门
1、卸载原版本的Flash player,可以到控制面板添加删除里删除, 注:如果控制面板里无法删除,可以上下载flash player 卸载器执行卸载操作。点击下载 2、打开注册表,找到[HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerActiveX Compatibility],将其下面的{D27CDB6E-AE6D-11CF-96B8-444553540000}项或{D3f97240- C9f4-11CF-BFCr-0...

经验教程

505

收藏

91
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部