PHP:将变量绑定到表类型输出参数

Posted

技术标签:

【中文标题】PHP:将变量绑定到表类型输出参数【英文标题】:PHP: Binding variable to table type output parameter 【发布时间】:2015-01-14 22:20:34 【问题描述】:

好的,我遇到了一个绑定输出参数的问题,该参数是从 Oracle 数据库返回一个表。

这是一个例子:

procedure_name(
    p_first IN NUMBER,
    p_second IN VARCHAR2,
    x_table_name OUT some_table_type,
    x_row_count OUT NUMBER
);

在使用此过程的 oracle 中一切正常。

我来 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 数组获取,但还没有做到这一点:/

【问题讨论】:

变量名不能使用占位符。它们只能用在需要表达式的地方。 在过程定义中使用这些参数没有意义。您应该参数化 CALL procedure_name(:p_first, :p_second, :x_table_name, :x_row_count) 查询。 【参考方案1】:

问题已通过以下方式解决:

 $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 过程和函数中获取自定义字段和表类型数据。

【讨论】:

以上是关于PHP:将变量绑定到表类型输出参数的主要内容,如果未能解决你的问题,请参考以下文章

错误:类型参数“RoutesBloc”不符合“BlocBuilder”上类型变量“B”的绑定“BlocBase<S>”

PHP中var_dump 和dump的区别是啥????

参数绑定

php操作达梦数据库示例代码(包括绑定变量,存储过程调用,clob类型操作等)

php,mysqli-stmt.bind-param]:类型定义字符串中的元素数与绑定变量数不匹配

将绑定传递给类型属性包装器的变量 - 失去基础类型