php_call_oracle_procedure
浏览:1676次 出处信息
在PHP中调用oracle中的存储过程,通常就是采用PHP的OCI扩展所提供的函数来进行调用。
关于PHP调用存储过程,基本上的搜索到的国内的网页,其步骤都差不多,也只是谈到了存储过程返回一般参数,即Varchar2、number这种类型,基本上没有讲到如何返回ref cursor类型。
笔者经过测试发现,其实调用返回ref cursor类型的存储过程,其方式也与一般的调用类似,唯一不同的地方就是在采用oci_bind_by_name将采用oci_ew_cursor的创建的cursor类型的变量绑定到输出游标后,在采用oci_execute执行预处理resource后,需要采用oci_execute执行刚才所绑定的那个游标,再采用oci_fetch_*等函数获取该游标的值。
各位TX可以参考以下的代码:
<?php
$conn = oci_connect('SCOTT','TIGER') or die;
$sql = 'BEGIN blog.latest(:num_entries, :blog_entries); END;';
$stmt = oci_parse($conn, $sql);
// Bind the input num_entries argument to the $max_entries PHP variable
$max_entries = 5;
oci_bind_by_name($stmt,":num_entries",$max_entries,32);
// Create a new cursor resource
$blog_entries = oci_new_cursor($conn);
// Bind the cursor resource to the Oracle argument
oci_bind_by_name($stmt,":blog_entries",$blog_entries,-1,OCI_B_CURSOR);
// Execute the statement
oci_execute($stmt);
// Execute the cursor
oci_execute($blog_entries);
print "The $max_entries most recent blog entries\n";
// Use OCIFetchinto in the same way as you would with SELECT
while ($entry = oci_fetch_assoc($blog_entries, OCI_RETURN_LOBS )) {
print_r($entry);
}
?>
以上代码中标红色的那句代码至关重要,若返回的游标没有执行的话,将无法获取到游标的内容!
注意:在写存储过程时,若遇到同时有varchar2、number、ref_cursor等类型的做为输出时,需要将ref_cursor类型的参数放在参数列表的最后,否则将可能出现意想不到的异常!
具体原因笔者也未找到,若有TX发现,可一起讨论一下!
另外,Oracle表中的Clob类型的字段,在查询出结果后,采用var_dump出来看,会发现,那个字体是resource类型,resource类型是不能够直接显示的,需要采用stream_get_contents或者fgets等函数才能取出相应的字符串。
这个处理相对比较简单,这里就不用专门写DEMO了。
建议继续学习:
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:ECSHOP二次开发指南
后一篇:PHP伪随机发生器 >>
文章信息
- 作者:achao 来源: PHP开发
- 标签: php_call_oracle_ 存储过程
- 发布时间:2010-08-12 04:37:57
建议继续学习
近3天十大热文
- [53] IOS安全–浅谈关于IOS加固的几种方法
- [52] 如何拿下简短的域名
- [51] android 开发入门
- [51] 图书馆的世界纪录
- [50] Oracle MTS模式下 进程地址与会话信
- [49] Go Reflect 性能
- [46] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [36] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑