好的,我在绑定输出参数时遇到了一个问题,即从 Oracle 数据库返回一个表。
下面是一个示例:
procedure_name(
p_first IN NUMBER,
p_second IN VARCHAR2,
x_table_name OUT some_table_type,
x_row_count OUT NUMBER
);
在使用此程序的预言机中一切正常。
我来到PHP,我试试这个,不去:
$first = 55;
$second = 'Hello';
$stm = oci_parse($conn, "begin procedure_name(:p_first, :p_second, :x_table_name, :x_row_count)); end;");
oci_bind_by_name($stm, ":p_first", $first, 11, SQLT_INT);
oci_bind_by_name($stm, ":p_second", $second, 11, SQLT_INT);
oci_bind_by_name($stm, ":x_table_name", $table_output, -1, OCI_B_NTY);
oci_bind_by_name($stm, ":x_row_count", $table_row_count, 11, SQLT_INT);
oci_execute($stm);
结果我得到:ORA-01008:并非所有变量都绑定。
现在我仍然需要弄清楚如何将变量 $table_output 获取为对象数组或只是一个 assoc 数组,但还没有走那么远:/
此问题已通过使用:
$table_output = oci_new_collection($conn,'some_table_type','schema');
在绑定之前。
一个很好的资源是第 204 页到 212 页:http://www.oracle.com/technetwork/database/database-technologies/php/201212-ug-php-oracle-1884760.pdf
它提供了大量有关如何从 Oracle 过程和函数获取自定义字段和表类型数据的示例。