oci_new_collection
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_new_collection — 分配新的 collection 对象
说明
oci_new_collection(resource
$connection
, string $type_name
, ?string $schema
= null
): OCICollection|false分配新的 collection 对象。
参数
connection
-
Oracle 连接标识符,由 oci_connect() 或 oci_pconnect() 返回。
type_name
-
应该是有效的命名类型(大写)。
schema
-
应该指向创建命名类型的 scheme 。当传递
null
时,使用当前用户名。
返回值
返回新 OCICollection 对象,或者当失败时返回 false
。
更新日志
版本 | 说明 |
---|---|
8.0.0、PECL OCI8 3.0.0 |
schema 现在可为 null。
|
注释
注意:
OCICollection 类在 PHP 8 和 OCI8 3.0.0 之前叫做 OCI-Collection。
+添加备注
用户贡献的备注 1 note
VLroyrenn ¶
6 years ago
This is a woefully underdocumented feature (at least here), but being able to bind collections to prepared statements instead of rolling your own SQL arrays is a massive improvement in terms of safety and conveinience, and a feature I think more DBMS should have in their API.
You can basically send collections of the types listed by the following query :
SELECT * FROM SYS.ALL_TYPES WHERE TYPECODE = 'COLLECTION' AND TYPE_NAME LIKE 'ODCI%'
Those are all collections that can contain any number of the SQL type indicated in their name.
<?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);
?>
The collection ressource can be appended with numbers, strings or dates (which need to be passed as strings in the "DD-MON-YY" format, such as "27-MAR-18", apparently) depending on the types supported by the collection you're using, and none of these appear to support timestamps or any of the more complex data types.
Code for the OCI collection type, for reference :
http://git.php.net/?p=php-src.git;a=blob;f=ext/oci8/oci8_collection.c;hb=refs/heads/master#l429
备份地址:http://www.lvesu.com/blog/php/function.oci-new-collection.php