PDO取Oraclelob大字段,当数据量太大无法取出的问题的解决办法
问题 无法 解决办法 数据量 PDO 取出 大字 oraclelob
2023-06-13 09:14:08 时间
首先,创建一个存储过程get_clob:
t_name:要查询的表名;f_name:要查询的字段名;u_id:表的主键,查询条件;l_pos:截取的开始位置;l_amount:截取长度;
CREATEORREPLACEPROCEDUREget_clob(t_nameinvarchar2,f_nameinvarchar,u_idininteger,l_posininteger,l_amountinBINARY_INTEGER,ReturnValueoutvarchar2)is
rule_xmlclob;
l_buffervarchar2(3999);
l_amount_BINARY_INTEGER;
begin
executeimmediate"select"||f_name||"from"||t_name||"whereid=:1"intorule_xmlusingu_id;
l_amount_:=l_amount;
DBMS_LOB.read(rule_xml,l_amount_,l_pos,l_buffer);
ReturnValue:=l_buffer;
endget_clob;
然后是php的处理程序:
$content="";
$num=0;//clob字段长度
$stmt=$oracle->prepare("selectlength(content)asnumfromtestwhereid=$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="beginget_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的资料网上还是比较少的,能解决问题的就更不多了,发出来跟大家分享一下,肯定还有其他比较好的解决办法,欢迎跟大家一起探讨。
t_name:要查询的表名;f_name:要查询的字段名;u_id:表的主键,查询条件;l_pos:截取的开始位置;l_amount:截取长度;
CREATEORREPLACEPROCEDUREget_clob(t_nameinvarchar2,f_nameinvarchar,u_idininteger,l_posininteger,l_amountinBINARY_INTEGER,ReturnValueoutvarchar2)is
rule_xmlclob;
l_buffervarchar2(3999);
l_amount_BINARY_INTEGER;
begin
executeimmediate"select"||f_name||"from"||t_name||"whereid=:1"intorule_xmlusingu_id;
l_amount_:=l_amount;
DBMS_LOB.read(rule_xml,l_amount_,l_pos,l_buffer);
ReturnValue:=l_buffer;
endget_clob;
然后是php的处理程序:
$content="";
$num=0;//clob字段长度
$stmt=$oracle->prepare("selectlength(content)asnumfromtestwhereid=$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="beginget_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的资料网上还是比较少的,能解决问题的就更不多了,发出来跟大家分享一下,肯定还有其他比较好的解决办法,欢迎跟大家一起探讨。
相关文章
- Windows10系统下UWP应用在使用代理时无法联网问题解决办法
- JBPM工作流的性能问题「建议收藏」
- 不改一行代码定位线上性能问题
- qxdm无法安装问题闪一下_Qualcomm QXDM
- 总结一些线上问题排查的命令,可能用得到!
- Linux系统中JAVA创建文件后权限不足的问题,无法设置权限的问题
- 两圆重叠问题你会求解吗?这个问题的准确答案,德国数学家最近才找到
- WPF 已知问题 Separator 无法应用 ContextMenu 定义的默认样式
- 问题 1503: [蓝桥杯][算法提高VIP]前10名《冒泡排序》
- 解决Oracle监听服务创建失败问题(oracle监听无法创建)
- 解决Oracle登录不上的问题(oracle无法登录)
- Linux系统U盘无法识别问题解决方案(linuxu盘无法识别)
- 解决Oracle中无法删除当前连接的用户的问题(oracle无法删除当前连接的用户)
- 如何解决Oracle数据库无法打开的问题(oracle打不开数据库)
- 解决MySQL无法下载的问题(mysql下不了)
- MySQL语句无法执行如何解决你的数据库问题(mysql 不能执行语句)
- 解决mysql无法创建外键的问题(mysql不能创外键)
- Redis锁解决多进程并发问题的好帮手(redis锁的介绍)