【问题标题】:How to use oci_new_collection in php?如何在 php 中使用 oci_new_collection?
【发布时间】:2015-04-13 22:36:26
【问题描述】:

我正在尝试使用 php 5 调用存储过程,我的问题是如何正确使用 'oci_new_collection' 函数?我在 php 网站上找不到任何示例。对于需要传递给存储过程的变量之一,它使用此自定义用户定义的表类型...

SQL> desc parameter_table
 parameter_table TABLE OF PARAMETER_TYPE
 Name                   Null?    Type
 ---------------------- -------- ----------------------------
 NAME                            VARCHAR2(200)
 VALUE                           VARCHAR2(4000)

所以我的猜测是我需要使用 oci_new_collection 来使用这个表类型。我的代码如下...

    $conn = DBConnect::getConnection();
    $parameter_table = oci_new_collection($conn, "PARAMETER_TABLE");
    //need to do something here....
    $parameter_table->append(:name => "owner_id", :value => "3945073");
    //

    $curs = oci_new_cursor($conn);
    $stid = oci_parse($conn, "begin reporting.execute_report(:name, :plist, :out); end;");
    oci_bind_by_name($stid, ':name', "TRAFFIC_ANALYSIS_CALL_SUMMARY");
    oci_bind_by_name($stid, ':plist', $parameter_table);
    oci_bind_by_name($stid, ":out", $curs, -1, OCI_B_CURSOR);
    oci_execute($stid); 

    oci_execute($curs);  // Execute the REF CURSOR like a normal statement id
    while (($row = oci_fetch_array($curs, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
        echo $row[0] . " " . $row[1] . "<br>\n";
    }

如何填充 $parameter_table 变量的名称/值字段?

【问题讨论】:

  • 您是否尝试过为oci_new_collection 使用第三个参数:oci_new_collection($conn, "PARAMETER_TABLE", "MY_SCHEMA");
  • $parameter_table = oci_new_collection($conn, "PARAMETER_TABLE"); # add var_dump() and show us the result var_dump ($parameter_table); $parameter_table-&gt;append(:name =&gt; "owner_id", :value =&gt; "3945073");

标签: php oracle oracle-call-interface


【解决方案1】:

嵌套表

CREATE OR REPLACE TYPE name_ntable
AS TABLE OF VARCHAR(60 CHAR)

变量定义 - OCI-Collection:

$collection = oci_new_collection($connect, 'NAME_NTABLE');

因为变量是你需要使用 oci_bind_by_name 的类型 oracle

其他

Access a varray type defined inside a package using oci_new_collection

https://community.oracle.com/message/2436812

【讨论】:

    【解决方案2】:

    寻找oci_new_collection 的机会不多,PHP 网站上的文档也没有。

    然而,我确实发现在 PHP 源代码附带的 phpt 测试中有一些使用示例。您可以在 PHP 源代码分发的 ext/oci8/tests 目录中找到它们。大约有十几个文件调用oci_new_collection

    您可以通过逆向工程来获得答案。

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 2016-05-17
      • 2014-01-07
      • 2012-10-01
      • 2015-12-22
      • 2012-02-05
      • 2011-03-20
      • 2012-10-29
      • 2010-12-22
      相关资源
      最近更新 更多