zl程序教程

您现在的位置是:首页 >  其它

当前栏目

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