我的 Oracle 數據庫中有一個過程,其中有一個數組作為輸出參數。在此過程中,我將所有球隊及其積分放入一個數組中。create or replace package pck_tournamentas type trranking is record ( position number , team VARCHAR2(20) , points number ); type taranking is table of trranking; procedure retrieve_ranking (oparray out taranking);end pck_tournament;但是當我嘗試用 PHP 調用這個過程時,我總是會得到這樣的錯誤:PLS-00306:調用“RETRIEVE_RANKING”時參數的數量或類型錯誤這是我的 PHP 代碼的一部分: $out_arr = array(); $stmt = oci_parse($conn, "BEGIN pck_tournament.retrieve_ranking(:taranking); END;"); oci_bind_array_by_name($stmt,":taranking", $out_arr, 10000, 10000, SQLT_CHR ); oci_execute($stmt); 如果我將 OUT 參數更改為 VARCHAR2 以進行測試,我就能夠讀取結果。但如果它是一個數組,我就無法讓它工作。所以問題一定是我使用了錯誤類型的參數來存儲我的 OUT 參數?我搜索了很多網站,但仍然不知道如何進行這項工作。
1 回答

www說
TA貢獻1775條經驗 獲得超8個贊
你在 oracle 中擁有的不僅僅是一個數組,它是一個記錄數組......所以 PHP 中的標準數組將無法處理它。
根據 Stack Overflow 上的以下問題,您需要告訴 PHP Type 的外觀
所以使用下面的(替換你的類型和模式)
$table_output = oci_new_collection($conn,'some_table_type','schema');
另一個問題也有一個很好的資源鏈接,可以找到更多關于這個的信息。
正如@MT0 所指出的,您還必須更改定義類型的方式。您可以按照建議將其更改為 object 或將其保留為記錄,但主要更改是將聲明移到包之外。
如果它們只在包中定義,PHP 將看不到它們。
- 1 回答
- 0 關注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消