PDO以OracleLOB大领域,能不能取出来当数据量太大的问题的解决方案
t_name:查询表的名称;f_name:要查询的字段名;u_id:表的主键查询条件;l_pos:拦截的开始;l_amount:截取长度。
创建或替换程序get_clob(t_name在VARCHAR2,f_name在VARCHAR,t_name,t_name)。
rule_xml CLOB;
l_buffer VARCHAR2(3999);
l_amount_ binary_integer;
开始
执行immediate'select| | f_name | | ' | | t_name | |的id是:1'into rule_xml使用;
l_amount_:= l_amount;
dbms_lob.read(rule_xml,l_amount_,l_pos,l_buffer);
ReturnValue: = l_buffer;
最后get_clob;
然后PHP的处理程序:
=内容;
为民= 0;的 / / CLOB字段的长度
美元美元支撑= Oracle ->准备(选择长度(内容)为民从测试id是$id));
如果(美元支撑->执行()){ / / ZJH是查询条件
$行=美元->取为();
Num =美元美元排{ 'num};
}
$开始= 1;初始化开始位置
$ = 2500;截距长度
t_name美元=测试'; / /工作表名称
f_name美元= 'content'; / / CLOB字段名称查找
同时($ $开始){
美元=;
为SQL =开始get_clob(,,,,,,);结束;;
美元美元支撑= Oracle ->准备($ SQL);
支撑美元-> bindparam(1,t_name美元,PDO::param_str,100);
支撑美元-> bindparam(2,f_name美元,PDO::param_str,100);
支撑美元-> bindparam(3,$ ID,PDO::param_str,100);
支撑美元-> bindparam(4美元开始,PDO::param_str,100);
支撑美元-> bindparam(5,$ Len,PDO::param_str,100);
支撑美元-> bindparam(6,$ RET,PDO::param_str,5000);
支撑美元->执行();
$内容;
$开始= $开始;
}
$ = null;
以上是一个完整的解决方案。这种方法不是我首创的。做过PB项目的大多数人都应该熟悉这个操作。
php操作oracle数据还是比较少的,可以解决的问题不多,发出来跟大家分享,一定有其他更好的解决方案,欢迎与你讨论。