oci_new_collection

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

oci_new_collection分配新的集合对象

描述

oci_new_collection(resource $connection, string $type_name, ?string $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 数组,这是在安全性 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
To Top