PHP OCI8 在具有日期数据类型的函数中按名称绑定
PHP OCI8 bind by name in function with date datatype
我必须调用 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'
如何在输出变量上调用生产者时将数据类型设置为日期?
如 oci_bind_by_name
manual page 中所述:
You must specify maxlength when using an OUT bind so that PHP allocates enough memory to hold the returned value.
如此简单地改变:
oci_bind_by_name($smt, ':c', $c);
至:
oci_bind_by_name($smt, ':c', $c, 100); // NOTE: 100 is arbitrary.
应该可以解决问题。
我必须调用 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'
如何在输出变量上调用生产者时将数据类型设置为日期?
如 oci_bind_by_name
manual page 中所述:
You must specify maxlength when using an OUT bind so that PHP allocates enough memory to hold the returned value.
如此简单地改变:
oci_bind_by_name($smt, ':c', $c);
至:
oci_bind_by_name($smt, ':c', $c, 100); // NOTE: 100 is arbitrary.
应该可以解决问题。