这是一个严重缺乏文档说明的功能(至少在这里是如此),但能够将集合绑定到预处理语句,而不是滚动你自己的 SQL 数组,这是在安全性 and 方便性方面的一大进步,我认为更多 DBMS 应该在其 API 中提供此功能。
你基本上可以发送以下查询列出的类型的集合
SELECT * FROM SYS.ALL_TYPES WHERE TYPECODE = 'COLLECTION' AND TYPE_NAME LIKE 'ODCI%'
所有这些都是可以包含任何数量在它们的名称中指示的 SQL 类型的集合。
<?php
$my_array = ["foo", "bar", "baz"];
$my_collection = oci_new_collection($conn, 'ODCIVARCHAR2LIST', 'SYS');
foreach($my_array as $elem) {
$cell_collection->append($elem);
}
oci_bind_by_name($statement, ":collection", $my_collection, -1, SQLT_NTY);
?>
集合资源可以附加数字、字符串或日期(需要以 "DD-MON-YY" 格式传递为字符串,例如 "27-MAR-18",显然),具体取决于你使用的集合支持的类型,并且这些类型似乎都不支持时间戳或任何更复杂的数据类型。
用于 OCI 集合类型的代码,供参考
http://git.php.net/?p=php-src.git;a=blob;f=ext/oci8/oci8_collection.c;hb=refs/heads/master#l429