PHP Conference Japan 2024

oci_new_collection

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_new_collection分配新的集合对象

描述

oci_new_collection(资源 $connection, 字符串 $type_name, ?字符串 $schema = null): OCICollection|false

分配一个新的集合对象。

参数

connection

一个 Oracle 连接标识符,由 oci_connect()oci_pconnect() 返回。

type_name

应为有效的命名类型(大写)。

schema

应指向创建命名类型的模式。当传递 null 时,使用当前用户的名称。

返回值

返回一个新的 OCICollection 对象或在发生错误时返回 false

变更日志

版本 描述
8.0.0,PECL OCI8 3.0.0 schema 现在可以为空。

备注

注意:

在 PHP 8 和 OCI8 3.0.0 之前,OCICollection 类称为 OCI-Collection

添加注释

用户贡献的注释 1 条注释

1
VLroyrenn
6 年前
这是一个非常缺乏文档的特性(至少在这里是这样),但是能够将集合绑定到预处理语句而不是自己编写 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
To Top