1. 程式人生 > >php如何訪問oracle 儲存過程

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

  • 入參傳值比較簡單,出參稍微複雜些,要指明長度