如何在php中使用oci_new_collection?

我试图使用
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来说,并没有太多关注,PHP网站上的文档也没有.

但我确实发现PHP源代码附带的phpt测试中有一些用法示例.您将在PHP源代码发行版的ext / oci8 / tests目录中找到它们.有大约十几个文件调用oci_new_collection.

您可以通过逆向工程找到答案.

点赞