oci_bind_array_by_name работает только с массивами с номерами c, а не с ассоциативными массивами php - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь отправить ассоциативный массив в качестве параметра для процедуры oracle, но выдает ошибку ниже

Предупреждение: oci_execute (): ORA-06550: строка 1, столбец 7: PLS-00306: неверный номер или типы аргументов при вызове 'IOBIND' ORA-06550

Но хорошо работает с индексным массивом цифр c.

Любой может помочь мне с этим?

Заранее спасибо.

$create = "CREATE TABLE bind_example(name VARCHAR(20))";

$stid = oci_parse($conn, $create);

oci_execute($stid);

$create_pkg = "

CREATE OR REPLACE PACKAGE ARRAYBINDPKG1 AS

TYPE ARRTYPE IS TABLE OF VARCHAR(20) INDEX BY VARCHAR(20);

PROCEDURE iobind(c1 IN ARRTYPE);

END ARRAYBINDPKG1;";

$stid = oci_parse($conn, $create_pkg);

oci_execute($stid);

$create_pkg_body = "

CREATE OR REPLACE PACKAGE BODY ARRAYBINDPKG1 AS

PROCEDURE iobind(c1 IN ARRTYPE) IS

BEGIN

INSERT INTO bind_example VALUES (c1('one'));

END iobind;

END ARRAYBINDPKG1;";

$stid = oci_parse($conn, $create_pkg_body);

oci_execute($stid);

$stid = oci_parse($conn, "BEGIN arraybindpkg1.iobind(:c1); END;");

$array = array("one" => 'Test1', "two" => 'Test2', "three" => 'Test3');

oci_bind_array_by_name($stid, ":c1", $array, 3, -1, SQLT_CHR);

oci_execute($stid);

var_dump($array);
...