以下是我的程序
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....
我该如何解决这个问题?有帮助吗?感谢
答案 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”。这解决了我们的问题。