【问题标题】:PHP OCI8 bind by name in function with date datatype [duplicate]PHP OCI8在日期数据类型的函数中按名称绑定[重复]
【发布时间】:2017-03-14 22:51:36
【问题描述】:

我必须在 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'

如何在输出变量上调用生产者时将数据类型设置为日期?

【问题讨论】:

    标签: php oracle oci8


    【解决方案1】:

    oci_bind_by_name manual page 中所述:

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

    所以简单地改变:

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

    到:

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

    应该能解决问题。

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 2013-07-09
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2012-08-08
      • 2012-11-09
      相关资源
      最近更新 更多