这是一个非常缺乏文档的特性(至少在这里是这样),但是能够将集合绑定到预处理语句而不是自己编写 SQL 数组,在安全性方面和便捷性方面都是巨大的改进,我认为更多数据库管理系统应该在其 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