开发者

PHP: calling Oracle stored proc that returns a table

开发者 https://www.devze.com 2023-03-09 17:56 出处:网络
I have an Oracle stored proc that takes 2 parameters. userid as an input parameter and an Oracle table with 2 columns as second out parameter. How can I invoke the procedure from PHP? I th开发者_如何学

I have an Oracle stored proc that takes 2 parameters. userid as an input parameter and an Oracle table with 2 columns as second out parameter. How can I invoke the procedure from PHP? I th开发者_如何学JAVAink that the problem stands in the oci_bind_* for the second parameter. I've tried oci_bind_array_by_name but I always get PLS-00306: wrong number or types of arguments in call to GET_VALUES.

Can anyone help me, please?

Here is my code:

$tab=array();
$query = "begin GET_VALUES(:P_CUSTOMERCODE,:P_TAB); end;";
$stmt = oci_parse($ora_conn, $query) or die(oci_error());
oci_bind_by_name($stmt,":P_CUSTOMERCODE",$codUtente,255);
oci_bind_array_by_name($stmt,":P_TAB",$tab,100,100,SQLT_CHR);
oci_execute($stmt) or die(oci_error());


This might answer your problem: How to call package from php having procedure in oracle using oci drivers?


Not sure a multi-column table will work with oci_bind_array_by_name. Looking at the php manual, you can use this to bind a simple varray, assoc array or nested table, basically as simply 1 column list of values. You'd specify the type of array in the "type" param, using SQLT_CHR for varchar2 for example (if you defined an array like : type t_array is table of varchar2(100) index by pls_integer).

Seems you created a custom table of a custom record type(?), something like:

type t_rec is record (
col1 number,
col2 varchar2(100)
);
type t_tab is table of t_rec;

I don't see where you can bind to t_tab as an out param using php's oci8 calls, but I may be mistaken.

0

精彩评论

暂无评论...
验证码 换一张
取 消