PHP OCI8 привязывается по имени в функции с типом данных даты

Мне нужно вызвать процедуру в базе данных Oracle. процедура такая:

procedure test
  (a IN VARCHAR2
  ,b IN INTEGER
  ,c OUT DATE)

Я вызываю процедуру как

$sql="BEGIN test(:a, :b, :c); END;";

$smt = oci_parse($db, $sql);
oci_bind_by_name($smt, ':a', $a);
oci_bind_by_name($smt, ':b', $b);
oci_bind_by_name($smt, ':c', $c);
$results = oci_execute($smt);

Когда c пуст, все работает нормально. Но когда он имеет значение, я получаю эту ошибку

oci_execute(): ORA-06502: PL
/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 1'

Как я могу установить тип данных как дату при вызове производителя для выходной переменной?


person Dario    schedule 14.03.2017    source источник


Ответы (1)


Как описано на oci_bind_by_name странице руководства:

Вы должны указать maxlength при использовании привязки OUT, чтобы PHP выделил достаточно памяти для хранения возвращаемого значения.

Итак, просто изменить:

oci_bind_by_name($smt, ':c', $c);

to:

oci_bind_by_name($smt, ':c', $c, 100); // NOTE: 100 is arbitrary.

должен решить проблему.

person timclutton    schedule 14.03.2017