aci_bind_array_by_name¶
aci_bind_array_by_name-将PHP数组绑定到PL/SQL数组参数
说明¶
aci_bind_array_by_name(
resource $statement,
string $param,
array &$var,
int $max_array_length,
int $max_item_length = -1,
int $type = SQLT_AFC
): bool
将PHP数组变量绑定到占位符param,该占位符指向 PL/SQL数组。它将用于输入还是输出将在运行时确定。
参数¶
有效的ACI语句标识符。
占位符。
数组。
设置传入数组和结果数组的最大长度。
设置数组项的最大长度。如果未指定或等于-1, oci_bind_array_by_name() 将找到传入数组中最长的元素,并将其用作最大长度。
应用于设置PL/SQL数组项的类型。请参阅下面的可用类型列表:
SQLT_NUM-用于NUMBER数组。
SQLT_INT-用于INTEGER数组(注意:INTEGER实际上是NUMBER(38)的同义词,但**SQLT_NUM**类型在这种情况下不起作用,即使它们是同义词)。
SQLT_FLT-用于FLOAT阵列。
SQLT_AFC-用于CHAR数组。
SQLT_CHR-用于VARCHAR2的数组。
SQLT_VCS-用于VARCHAR数组。
SQLT_AVC-用于CHARZ数组。
SQLT_STR-用于STRING数组。
SQLT_LVC-用于LONG VARCHAR数组。
SQLT_ODT-用于DATE数组。
返回值¶
成功时返回 true, 或者在失败时返回 false。
范例¶
示例 #1 oci_bind_array_by_name() example
<?php
$conn = aci_connect('sysdba', 'szoscar55', 'localhost:2003/OSRDB');
if (!$conn) {
$m = aci_error();
trigger_error(htmlentities($m['message']), E_USER_ERROR);
}
$create = "CREATE TABLE bind_example(name VARCHAR(20))";
$stid = aci_parse($conn, $create);
aci_execute($stid);
$create_pkg = "
CREATE OR REPLACE PACKAGE ARRAYBINDPKG1 AS
TYPE ARRTYPE IS TABLE OF VARCHAR(20) INDEX BY BINARY_INTEGER;
PROCEDURE iobind(c1 IN OUT ARRTYPE);
END ARRAYBINDPKG1;";
$stid = aci_parse($conn, $create_pkg);
aci_execute($stid);
$create_pkg_body = "
CREATE OR REPLACE PACKAGE BODY ARRAYBINDPKG1 AS
CURSOR CUR IS SELECT name FROM bind_example;
PROCEDURE iobind(c1 IN OUT ARRTYPE) IS
BEGIN
-- Bulk Insert
FORALL i IN INDICES OF c1
INSERT INTO bind_example VALUES (c1(i));
-- Fetch and reverse
IF NOT CUR%ISOPEN THEN
OPEN CUR;
END IF;
FOR i IN REVERSE 1..5 LOOP
FETCH CUR INTO c1(i);
IF CUR%NOTFOUND THEN
CLOSE CUR;
EXIT;
END IF;
END LOOP;
END iobind;
END ARRAYBINDPKG1;";
$stid = aci_parse($conn, $create_pkg_body);
aci_execute($stid);
$stid = aci_parse($conn, "BEGIN arraybindpkg1.iobind(:c1); END;");
$array = array("one", "two", "three", "four", "five");
aci_bind_array_by_name($stid, ":c1", $array, 5, -1, SQLT_CHR);
aci_execute($stid);
var_dump($array);
?>