php 访问oracle 存储过程实例详解
比如我的本地oracle数据库有一个package,里面有一个存储过程:
create or replace package pkg_trans_rel is
-- author : test
-- created :
-- purpose : test
-- public type declarations
pkg_name varchar2(20) := 'pkg_trans_rel';
--存储过程,测试用
procedure pro_gc_withdraw(in_merch_no in varchar2,
in_withdraw_amt in number,
out_result out number,
out_errmsg out varchar2);
end pkg_trans_rel;
包名是pkg_trans_rel,存储过程是pro_gc_withdraw,这个存储过程有四个参数,两个入参,两个出参。
在php中通过pdo调用示例:
$this->_pdo = new pdo(pdo_db_dns, pdo_db_user, pdo_db_password);
$call = "call pkg_trans_rel.pro_gc_withdraw(?,?,?,?)";
try{
$stmt = $this->_pdo->prepare($call);
$stmt->bindparam(1, $merch_no);
$stmt->bindparam(2, $amount, pdo::param_int);
$stmt->bindparam(3, $result, pdo::param_int, 4);
$stmt->bindparam(4, $error_msg, pdo::param_str, 64);
$stmt->execute();
}catch (pdoexception $e)
{
$msg = 'sql:'.$e->getmessage();
$msg = iconv('gbk','utf-8',$msg);
user_dump('sql:'.$msg);
return false;
}
...
bindparam第三个参数默认是pdo::param_str,如果是其它类型就要指明
入参传值比较简单,出参稍微复杂些,要指明长度。
更多php 访问oracle 存储过程实例详解。