Bulgaria PHP Conference


(PHP 5 >= 5.1.2, PECL OCI8 >= 1.2.0)

oci_bind_array_by_nameLie un tableau PHP à un paramètre de tableau Oracle PL/SQL


bool oci_bind_array_by_name ( resource $statement , string $name , array &$var_array , int $max_table_length [, int $max_item_length = -1 [, int $type = SQLT_AFC ]] )

Lie un tableau PHP var_array à un marqueur 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.

Liste de paramètres


Un identifiant de requête OCI valide.


Le marqueur Oracle.


Un tableau.


Spécifie 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 ne fonctionnera pas 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.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.


Exemple #1 Exemple avec oci_bind_array_by_name()


if (!
$conn) {
$m oci_error();
trigger_error(htmlentities($m['message']), E_USER_ERROR);

$create "CREATE TABLE bind_example(name VARCHAR(20))";
$stid oci_parse($conn$create);

$create_pkg "
$stid oci_parse($conn$create_pkg);

$create_pkg_body "
  CURSOR CUR IS SELECT name FROM bind_example;
    -- Bulk Insert
      INSERT INTO bind_example VALUES (c1(i));

    -- Fetch and reverse;
      OPEN CUR;
    END IF;
      FETCH CUR INTO c1(i);
        CLOSE CUR;
      END IF;
  END iobind;
$stid oci_parse($conn$create_pkg_body);

$stid oci_parse($conn"BEGIN arraybindpkg1.iobind(:c1); END;");
$array = array("one""two""three""four""five");
oci_bind_array_by_name($stid":c1"$array5, -1SQLT_CHR);



add a note add a note

User Contributed Notes 3 notes

6 years ago
This function appears to work with PL/SQL associative arrays (index-by tables) but I was unable to get it to work with PL/SQL varrays
8 years ago
Note that it looks like you can't bind a multi-dimensional array with this method. If you try, you'll get a Notice about Array to string conversion, and your PL/SQL will end up with a one-dimensional array filled with the a lot of string values, all saying "Array". :|
david dot paper at usu dot edu
5 years ago
We were able to get the example included for the "OCI_BIND_ARRAY_BY_NAME" to work. However, the example is NOT actually binding with a PL/SQL array of any type. It is writing data to an Oracle table named "bind_example". Notice how this table is created. The table does NOT have an array type as one of its fields. Since this is the case, there cannot be any binding to a PL/SQL array because at least one field in the table must be either a VARRAY, NESTED TABLE or ASSOCIATIVE ARRAY data type. We searched the Internet and could not find any examples that actually read from a PL/SQL array type. We were able to get data from a PL/SQL VARRAY data type, but only by using a SELECT statement.
To Top