2012-11-02 49 views
0

這個簡短的介紹瞭如何:如何調用Oracle存儲函數/過程與PHP和Zend DB號碼列表

  1. 到Oracle數據庫使用的PHP Zend DB連接
  2. 調用存儲程序/存儲與Zend DB功能
  3. 傳遞一個真實陣列或作爲輸入參數到存儲過程/功能的整數的集合(我不會在逗號分隔的值的字符串傳遞)
  4. 得到

    讓我們去:存儲函數

(我使用了Oracle 11.x的,PHP 5.x和Zend框架的1.x注)的結果。

創建甲骨文列表類型:

CREATE OR REPLACE TYPE NUMBER_LIST_TYPE IS TABLE OF NUMBER; 

創建一個存儲功能:

CREATE FUNCTION MY_STORED_FUNCTION(id_list in NUMBER_LIST_TYPE) RETURN NUMBER AS 
    lv_list_size number; 
BEGIN 
    select count(*) into lv_list_size from table(id_list); 
    RETURN lv_list_size; 
END MY_STORED_FUNCTION; 

創建一個PHP文件:

<?php 
require_once 'Zend/Db.php'; 
require_once 'DataSource.php'; 

$db_config['host'] = 'khazgoroth'; 
$db_config['port'] = 1521; 
$db_config['username'] = 'thrall'; 
$db_config['password'] = 'chuchu'; 
$db_config['dbname'] = 'orgrimmar'; // see TNSNAMES.ORA 

$db = Zend_Db::factory('Oracle', $db_config); 

$conn = $db->getConnection(); 

$sql = 'BEGIN :r := MY_STORED_FUNCTION(:pmids); END;'; 

// Create an OCI-Collection object of NUMBER_LIST_TYPE 
$ids = oci_new_collection($conn, 'NUMBER_LIST_TYPE'); 

$id_array = array(1, 12, 67); 

// Append all IDs to the collection; 
foreach ($id_array as $id) { 
    $ids->append($id); 
} 

// create a statement and bind the parameters 
$stmt = new Zend_Db_Statement_Oracle($db, $sql); 
$stmt->bindParam(':pmids', $ids, SQLT_NTY); 
$stmt->bindParam(':r', $result, SQLT_INT); // this is the result of the Stored Function 

$stmt->execute(); 

print "Result: $result"; 
?> 

希望這可以幫助別人。

回答

0

我擔心Zend_Db無法做到這一點,但您可以通過bindArray方法增強Zend_Db的實現。

在普通的PHP中,您可以使用http://php.net/manual/en/function.oci-bind-array-by-name.php,它的工作非常好,您只需將php數組直接綁定到pl/sql過程。

+0

描述(如何)應該顯示,可以使用Zend_Db和oci_new_collection的一點幫助。 – gfjr