PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法
来源:asp之家 发布时间:2009-04-30 18:41:00
首先,创建一个存储过程 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的资料网上还是比较少的,能解决问题的就更不多了,发出来跟大家分享一下,肯定还有其他比较好的解决办法,欢迎跟大家一起探讨。


猜你喜欢
- 1、找到mysql安装路径D:\xxx\MYSQL\MySQL Workbench CE 6.0.8下的mysqldump.exe,由于脚本
- 本文介绍了关于redux-saga中take使用方法详解,分享给大家,具体如下:带来一个自己研究好久的API使用方法.redux-saga中
- 什么是计算属性概念计算属性是vue里面为了简化在模板语法中对响应式属性做计算而存在的什么时候应该使用计算属性根据现有响应式的值得到一个新的值
- 一、json_encode() 对变量进行JSON编码语法:json_encode($value[,$options=0])注意: 
- 摘要global 标志实际上是为了提示 python 解释器,表明被其修饰的变量是全局变量。这样解释器就可以从当前空间 (curr
- 在知乎上看到这样一个问题:MySQL 查询 select * from table where id in (几百或几千个 id) 如何提高
- ASP 内建对象Active Server Pages 提供内建对象,这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用
- 1.mysql多实例mysql多实例是指在一台或多台机器上跑多个mysql数据库,大大节省开销的费用,方便管理数据内容。2.环境设备系统版本
- 本文内容由经典论坛星级会员 lipengadmin 收集整理绝大部分属于转载,有很多还是出自咱们蓝色的经典论坛.*****[第1页目录]**
- cmp()方法返回两个数的差的符号: -1 如果 x < y, 0 如果 x == y, 或者 1 如果 x > y
- 最近写毕业设计遇到一个问题,就是我从一个txt文件中逐个读取字符,并修改其中的内容后存到另一个txt文件中,如下图:字符替换规则是把所有的0
- 1、由于 Python 列表的切片会在内存中创建新对象,因此需要注意的另一个重要函数是itertools.islice。2、通常需要遍历切片
- 问题:pycharm无法调用pip安装的包原因:pycharm没有设置解析器解决方法:打开pycharm->File->Sett
- 引言最近遭遇了绑定手机号相关的压测需求,有了手机号登录的经验和测试数据,这次算起来比较简单。最重要的是难点就是要求开发配合调整配置已经在上一
- 本文实例为大家分享了python实现电子词典的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-#youdan
- 四种基本的函数类型局部变量 就是在函数内部定义的变量【作用域仅局限于函数内部】不同的函数 可以定义相同的局部变量,但是各自用各自的 不会产生
- 中文繁体、简体的差异,在NPL中类似英文中的大小写,但又比大小写更为复杂,比如同样为繁体字,大陆、香港和台湾又不一样。先前写过一篇中文繁简转
- 本文主要是写了一个将指定文件夹下的指定文件类型移动到指定位置,具体内容如下# coding:utf-8import osimport shu
- 自定义模板403<!DOCTYPE html><html lang="en"><head&
- 无意中看到一位学员的屏保,感觉挺有意思的,就把它实现了下来效果如下:<!DOCTYPE html PUBLIC "-//W3