PHP OCI8通过名称与日期数据类型绑定



我必须在Oracle DB中调用一个过程。该过程就像:

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'

如何将数据类型设置为日期,以在OUT变量上调用生产者?

,如oci_bind_by_name手册页上的记录:

使用OUT绑定时必须指定最大值,以便PHP分配足够的内存以保持返回的值。

如此简单地更改:

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

to:

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

应该解决问题。

最新更新