(PHP 5 >= 5.1.2, PECL oci8:1.2.0-1.2.4)
oci_bind_array_by_name — Lie un tableau PHP à un tableau Oracle PL/SQL par son nom
Lit un tableau PHP var_array à un marquer Oracle name , qui pointe vers un tableau PL/SQL. Il peut être utilisé pour l'entrée ou la sortie, suivant la configuration à l'exécution.
Un identifiant de requête OCI valide.
Le marqueur Oracle.
Un tableau.
Définit la longueur maximale des tableaux d'entrées et de résultats.
Définit la longueur maximale pour les éléments du tableau. Si max_item_length n'est pas fourni ou s'il vaut -1, oci_bind_array_by_name() cherchera l'élément le plus long dans le tableau d'entrée et l'utilisera en tant que longueur maximale.
Devrait être utilisé pour définir le type des éléments PL/SQL. Voir la liste des types disponibles ci-dessous :
SQLT_NUM - pour les tableaux de NUMBER.
SQLT_INT - pour les tableaux INTEGER (Note : INTEGER c'est actuellement un synonyme pour NUMBER(38), mais le type SQLT_NUM fonctionne dans ce cas même s'ils sont synonymes).
SQLT_FLT - pour les tableaux de FLOAT.
SQLT_AFC - pour les tableaux de CHAR.
SQLT_CHR - pour les tableaux de VARCHAR2.
SQLT_VCS - pour les tableaux de VARCHAR.
SQLT_AVC - pour les tableaux de CHARZ.
SQLT_STR - pour les tableaux de STRING.
SQLT_LVC - pour les tableaux de LONG VARCHAR.
SQLT_ODT - pour les tableaux de DATE.
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
Exemple #1 Exemple avec oci_bind_array_by_name()
<?php
$c = oci_connect("scott", "tiger");
$create = "CREATE TABLE bind_example(name VARCHAR(20))";
$statement = oci_parse($c, $create);
oci_execute($statement);
$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;";
$statement = oci_parse($c, $create_pkg);
oci_execute($statement);
$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
FOR i IN 1..5 LOOP
INSERT INTO bind_example VALUES (c1(i));
END LOOP;
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;";
$statement = oci_parse($c, $create_pkg_body);
oci_execute($statement);
$statement = oci_parse($c, "BEGIN ARRAYBINDPKG1.iobind(:c1); END;");
$array = array("one", "two", "three", "four", "five");
oci_bind_array_by_name($statement, ":c1", $array, 5, -1, SQLT_CHR);
oci_execute($statement);
var_dump($array);
?>
Note: Cette fonction est disponible depuis OCI8 version 1.2.