這是一個文件嚴重不足的功能(至少在這裡是這樣),但是能夠將集合綁定到預備語句,而不是自行滾動 SQL 陣列,在安全性和便利性方面是一項巨大的改進,我認為更多 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