2011-11-22 129 views
0

我通過OCI8連接到Oracle。從Oracle存儲過程返回OCI8表

我有一個存儲過程:

PROCEDURE ocigetaccounts(accounts OUT SYS_REFCURSOR) 
    IS BEGIN 
    OPEN accounts FOR 
     SELECT * FROM tbaccounts; 
    END ocigetaccounts; 

而且我嘗試使用OCI將其返回到PHP:

$sqlString = 'BEGIN accounts.ocigetaccounts(:accounts); END;'; 
oci_bind_by_name($statement, ':accounts', $result, -1); 
    echo $result; 

(要求PHP端OCI到位的其餘部分。 )

我得到的錯誤是:

警告:oci_execute():ORA-06550:1號線,共lumn 7:PLS-00306:錯號碼或類型的呼叫參數「OCIGETACCOUNTS」

我怎樣才能獲得$結果到容器上的表資源

回答

2

據我所知,$result將包含您在之後的資源。 您收到的錯誤是因爲遊標未定義爲類型遊標。 你必須明確地定義$result爲光標

$result = oci_new_cursor($dbci); 

如果返回$result,它會返回一個資源,你應該處理它,就像你處理任何其他返回的資源。

對於示例(與$dbci是你的連接資源):

$sqlString = 'BEGIN accounts.ocigetaccounts(:accounts); END;'; 

$stmt = oci_parse ($dbci, $sqlString); 
//Declare cursor 
$result = oci_new_cursor($dbci); 

//Bind cursor 
oci_bind_by_name ($stmt, ':accounts', $result, -1, OCI_B_CURSOR); 

//Execute query 
if (oci_execute ($stmt)) { 
    //Execute cursor 
    oci_execute($result); //Or you can return the cursor. 
} 

這是我們如何處理遊標從數據庫返回。 希望這可以解決問題