2012-07-01 40 views
1

我使用的是Oracle适配器进行连接到数据库连接到数据库,这里的中的application.ini的配置,错误,同时试图使用Zend Framework

resources.db.adapter = "Oracle" 
resources.db.params.host = "localhost" 
resources.db.params.username = "user" 
resources.db.params.password = "2012" 
resources.db.params.dbname = "books" 
resources.db.isDefaultTableAdapter = true 

在这里我如何调用存储过程

$db = Zend_Db_Table::getDefaultAdapter(); 
    try { 
     // $sql = "select * from dual"; 
     $sql = "begin BA_OPERATIONS_PKG.GETMEMBERCRED(" . 
       ":I_USER_ID, :DATA_REC); end;"; 

     $statement = new Zend_Db_Statement_Oracle($db, $sql); 

     $params = array(
      'I_USER_ID' => $userId 
     ); 

     // Create a cursor 
     $cursor = new Zend_Db_Cursor_Oracle($db); 

     // Bind the cursor as a parameter. This SHOULD push a new cursor in the 
     // $_bindCursor stack from Zend_Db_Statement. 
     $statement->bindCursor('DATA_REC', $cursor); 

     $statement->execute($params); 

     echo $cursor; 

    } catch (Exception $e) { 
     print_r($e->getMessage()); 
    } 

这里的例外,我有

include_once(Zend\Db\Cursor\Oracle.php) [function.include-once]: failed to open stream: No such file or directory in D:\ZendFramework\library\Zend\Loader.php 
+3

Zend Framework中没有'Zend_Db_Cursor_Oracle'类。我能找到的唯一参考是2009年的这个提案:http://framework.zend.com/wiki/display/ZFPROP/Zend_Db_Cursor+-+Bruno+Piraja+Moyle,但该组件从未将其纳入ZF。 –

+0

这是我从中获取资源的网站。 – palAlaa

+0

你有没有更好的方法来从orcale接收游标? – palAlaa

回答

0

我扩展了Oracle适配器,并增加了其实现方法具d:

<?php 

/** 
* @see Zend_Db_Adapter_Pdo_Oci 
*/ 
require_once 'Zend/Db/Adapter/Oracle.php'; 

class Zend_Db_Adapter_Cds extends Zend_Db_Adapter_Oracle 
{ 
    public function fetchCursor($sql, $bind = array()) 
    { 
     $data = array(); 
     $conn = $this->getConnection(); 

     $curs = oci_new_cursor($conn); 
     $stmt = oci_parse($conn, $sql); 

     oci_bind_by_name($stmt, "cursor", $curs, -1, OCI_B_CURSOR); 
     foreach ($bind as $key => &$val) { 
      oci_bind_by_name($stmt, $key, $val, -1, OCI_ASSOC); 
     } 

     oci_execute($stmt); 
     if ($e = oci_error($stmt)) { 
      throw new Zend_Db_Adapter_Oracle_Exception($e, -1234); 
     } 

     oci_execute($curs); 
     if (oci_fetch_all($curs, $data, 0, -1, OCI_FETCHSTATEMENT_BY_ROW)) { 
      ;//var_dump($data); 
     } 

     oci_free_statement($stmt); 
     oci_free_statement($curs); 

     return $data; 
    } 
}