【问题标题】:ORA-06502: PL/SQL: numeric or value error: character string buffer too small - Executing using OCI interfaceORA-06502: PL/SQL: 数字或值错误: 字符串缓冲区太小 - 使用 OCI 接口执行
【发布时间】:2017-04-24 02:15:20
【问题描述】:

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

列类型 member_name 是 VARCHAR2(100),member_id 是 NUMBER(20)

create or replace procedure GET_MEMBER_ID (V_MEMBER_NAME IN  VARCHAR2,V_MEMBER_ID OUT NUMBER ) AS 
BEGIN
SELECT member_id INTO V_MEMBER_ID
FROM mn_member WHERE member_name = V_MEMBER_NAME;
END;
/

我从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:在 rtp2/test.php 第 26 行的第 1 行 会员ID为0

【问题讨论】:

  • 看起来您在表格中的member_id 不是数字。请发布desc mn_member的结果
  • 是的,你是对的,表中的 member_id 是 NUMBER(20),我想知道如何在存储过程中指定它,因为我现在在指定 V_MEMBER_ID OUT NUMBER(20) 时遇到此错误(1,74): PLS-00103: 在期待以下之一时遇到符号“(”::= .), @ % 默认字符符号“:=”被替换为“(”以继续。
  • 规格可以,返回参数不需要设置精度,输入就可以了。我怀疑它是表中的varchar2member_name 的类型是什么?
  • member_name 是 VARCHAR2(100)
  • 在那种情况下暂时没有更多想法

标签: php oracle types


【解决方案1】:

我不是 PHP 人,但来自the docs

“使用 OUT 绑定时必须指定 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 数据类型规范的必要性。

【讨论】:

  • 上帝保佑你!
猜你喜欢
  • 2013-09-14
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 2015-05-16
  • 2018-03-16
相关资源
最近更新 更多