• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了PDO,Oracle,lob等相关知识,希望本文的分享对您有所帮助

最近,做sns的项目,用PDO连接Oracle数据库,读取Clob字段,当数据量非常大的时候(上万个字符),返回空值,从网上也没有查到相关的资料。自己刻苦研究加上同事帮助,终于解决了。废话就不说了,下面把内容贴出来。

首先,创建一个存储过程 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的资料网上还是比较少的,能解决问题的就更不多了,发出来跟大家分享一下,肯定还有其他比较好的解决办法,欢迎跟大家一起探讨。
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 利用MySQL函数实现判断视频扩展名的代码
  • mysql与mysqli的区别与用法说明
  • 如何使用PDO查询mysql避免SQL注入的方法
  • 通过PDO 查询mysql返回字段整型变为String型的解决方法
  • PDO操作MySQL基础教程
  • 以多种方式调用构造方法创建PDO对象
  • php通过Mysqli和PDO连接mysql数据详解
  • PDO中获取结果集
  • PDO中执行SQL语句
  • PDO连接数据库及DSN详解

相关文章

  • 2018-12-05mysql数据库从服务器移植到个人PC的方法
  • 2017-05-11通过mysql show processlist 命令检查mysql锁的方法
  • 2018-12-05Oracle中的IMU详解
  • 2018-12-05数据库的用户帐号管理基础知识
  • 2018-12-05mysql如何删除表中的重复行并保留id较小(或者较大)的记录
  • 2018-12-05了解MySQL如何优化
  • 2018-12-05mysqld_multi部署单机详解
  • 2018-12-05mysql proxy问题的解决方法
  • 2018-12-05MySQL中常用的SQL Mode
  • 2017-05-11分享20个数据库设计的最佳实践

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MYSQL错误:Can’t open file: ‘×××.MYI’ (err
    • 几种MySQL大量数据插入或修改的方法比较
    • mysql-VS2015连接MySQL数据库的问题
    • MySQL查询优化:用子查询代替非主键连接查询实例介绍
    • MySQL开启记录执行过的SQL语句方法
    • 与MSSQL对比学习MYSQL的心得(五)--运算符
    • MySQL时间日期查询方法与函数
    • 关于mysql_stat()函数的10篇文章推荐
    • MySql的安装及配置
    • MySQL里面的子查询实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有