Выполнение хранимой процедуры Oracle с выходным параметром массива сложного типа с использованием драйвера PHP oci - PullRequest
0 голосов
/ 26 марта 2019

У меня есть процедура Oracle

create or replace PROCEDURE PREVISAO_CHEGADA(PONTO IN number, LINHA IN number, ROTA IN number, RETORNO OUT POSICAO_ONIBUS_TAB) IS ...

где параметр out POSICAO_ONIBUS_TAB является массивом POSICAO_ONIBUS и POSICAO_ONIBUS -

create or replace TYPE POSICAO_ONIBUS AS OBJECT (LOGP_CODIGO NUMBER,   VEIC_CODIGO NUMBER, PROX_VIAG VARCHAR2(5), distancia NUMBER);

Мне нужно вызвать эту процедуру с PHP, но я получаю сообщение об ошибке:

oci_execute (): ORA-06550: строка 1, столбец 7: PLS-00306: неверный номер или типы аргументов при вызове 'PREVISAO_CHEGADA' ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется

следует приведенному ниже PHP-коду:

$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA=(SID=mydb)))";
$conn = oci_connect("user", "password", $db, 'WE8ISO8859P1');
$sql = 'BEGIN previsao_chegada(:ponto, :linha, :rota, :retornos); END;';
$stmt = oci_parse($conn,$sql);
oci_bind_by_name($stmt,':ponto',$ponto,10);
oci_bind_by_name($stmt,':linha',$linha,10);
oci_bind_by_name($stmt,':rota',$rota,10);
oci_bind_array_by_name($stmt,':retornos',$retornos, 100, 100, SQLT_CHR);

$ponto = 391;
$linha = 280;
$rota = 0;
$retornos = array();

oci_execute($stmt);
...