我正在尝试使用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变量的名称/值字段?
答案 0 :(得分:1)
oci_new_collection
的目标不是很多,PHP网站上的文档也没有。
但我确实发现PHP源代码附带的phpt测试中有一些用法示例。您将在PHP源代码分发的ext/oci8/tests
目录中找到它们。大约有十几个文件调用oci_new_collection
。
您可以通过逆向工程找到答案。
答案 1 :(得分: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