数值或值错误:字符串缓冲区太小 - PHP + Oracle

时间:2014-01-29 12:26:39

标签: php oracle stored-procedures

以下是我的程序

NOBL_TEC_TEST_PROC(v1 number,v2 out number)

我的模特函数

public function testProc()
{
    $result = '';
    $db = "orcl";
    $conn = oci_connect("***", "****", $db);
    $sql = 'begin NOBL_TEC_TEST_PROC(222, :seqno); end;';
    $stmt = oci_parse($conn,$sql);
    oci_bind_by_name($stmt, ':seqno', $result);
    oci_execute($stmt);

    return $result;

}

如果我给IN值<10,它工作正常,但是当我尝试给IN值> 10时,它会给出以下错误。

<b>Warning</b>:  oci_execute(): ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 1 in....

我该如何解决这个问题?有帮助吗?感谢

3 个答案:

答案 0 :(得分:4)

我知道它有点晚了,但您需要将缓冲区大小添加到oci_bind_by_name

oci_bind_by_name($stmt, ':seqno', $result,2000);

这可以解决您的问题

答案 1 :(得分:0)

可能在db中,过程参数IN有参数VARCHAR2(1)或类似的东西。

10以上的数字是两个字符,因此会出错。

您应该只是访问Oracle Procedure的源代码,更改过程的标题和正文中的参数类型并重新编译它。

答案 2 :(得分:0)

仅供参考:当参数声明为“IN OUT”时,也会引发此错误。由于我们使用refcursor来检索结果,因此实际上不需要声明,并且仅将其更改为“IN”。这解决了我们的问题。