Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小-使用OCI接口执行_Php_Oracle_Types - Fatal编程技术网

Php ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小-使用OCI接口执行

Php ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小-使用OCI接口执行,php,oracle,types,Php,Oracle,Types,我完全震惊了,不明白我需要做什么来修复这个错误。我有一个plsql程序,它接受一个varchar2字符串和一个OUT参数,它是一个数字。在我学习plsql和php时,你能帮助我吗 列的类型成员名称为VARCHAR2(100),成员id为NUMBER(20) 我从php执行上述存储过程,如下所示 error_reporting(E_ALL); ini_set('display_errors', 1); $conn = oci_connect("$user","$password"

我完全震惊了,不明白我需要做什么来修复这个错误。我有一个plsql程序,它接受一个varchar2字符串和一个OUT参数,它是一个数字。在我学习plsql和php时,你能帮助我吗

列的类型成员名称为VARCHAR2(100),成员id为NUMBER(20)

我从php执行上述存储过程,如下所示
   error_reporting(E_ALL);
   ini_set('display_errors', 1);
   $conn = oci_connect("$user","$password","$sid");

   $MEMBER_ID=0;
   $MEMBER_NAME='45390';
   echo gettype($MEMBER_NAME), "\n";
   echo gettype($MEMBER_ID), "\n";

   $sql_get_member_id = "BEGIN GET_MEMBER_ID(:MEMBER_NAME,:MEMBER_ID);END;";
   $stmt1 = oci_parse($conn,$sql_get_member_id);

   //  Bind the input parameter
   oci_bind_by_name($stmt1,':MEMBER_NAME',$MEMBER_NAME);
   oci_bind_by_name($stmt1,':MEMBER_ID',$MEMBER_ID);

   oci_execute($stmt1);
   echo "Member ID is ".$MEMBER_ID;
?>
这是我在php中看到的输出

字符串整数 警告:oci_execute()[function.oci execute]:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小ORA-06512:在第26行的rtp2/test.php的第1行 成员ID为0

我不是PHP高手,但来自:

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

也许可以尝试以下方式:

   //  Bind the input parameter
   oci_bind_by_name($stmt1,':MEMBER_NAME',$MEMBER_NAME);
   oci_bind_by_name($stmt1,':MEMBER_ID',$MEMBER_ID,20,SQLT_INT);

不确定是否需要SQLT_INT数据类型规范。

看起来表中的
成员id
不是数字。请发布
desc mn_member
是的,您是对的,表中的member_id是数字(20),我想知道如何在存储过程中指定,因为我现在在指定V_member_id OUT NUMBER(20)错误(1,74)时得到了这个错误:PLS-00103:遇到了符号“(,期望以下情况之一:=),@%默认字符符号“:=”被替换为“(”若要继续。规范是可以的,您不需要在返回参数中设置精度,只需要类型是可以的。我怀疑它是表中的
varchar2
member\u name
的类型是什么?member\u name是varchar2(100)。在这种情况下,上帝保佑您!
   //  Bind the input parameter
   oci_bind_by_name($stmt1,':MEMBER_NAME',$MEMBER_NAME);
   oci_bind_by_name($stmt1,':MEMBER_ID',$MEMBER_ID,20,SQLT_INT);