欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php 访问oracle 存储过程实例详解

程序员文章站 2024-03-06 13:46:26
php 访问oracle 存储过程实例详解 比如我的本地oracle数据库有一个package,里面有一个存储过程: create or replace pac...

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,如果是其它类型就要指明

入参传值比较简单,出参稍微复杂些,要指明长度

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!