将值分配给Out参数PL / SQL Error

时间:2014-09-11 09:38:48

标签: oracle plsql

我有一个存储过程如下

procedure Save_FormField(name in varchar2,age in varchar2,returnval out varchar2)
begin

update STATEMENT

if SQL%ROWCOUNT>0 then
returnval :='1';
end;

它抛出

ORA-06502: PL/SQL: numeric or value error: 
      character string buffer too smallORA-06512:

at

returnval :='1';

是不是错了?

3 个答案:

答案 0 :(得分:0)

查看以下测试用例:

SQL> CREATE OR REPLACE
  2  PROCEDURE Save_FormField(
  3      name IN VARCHAR2,
  4      RETURNVAL OUT VARCHAR2)
  5  AS
  6  BEGIN
  7    UPDATE EMP1 SET ENAME = 'Hello' WHERE ENAME = name;
  8    IF SQL%ROWCOUNT>0 THEN
  9      RETURNVAL   :='1';
 10    END IF;
 11  END;
 12  /

Procedure created.

SQL>
SQL> declare
  2  ret varchar2(100);
  3  a varchar2(1);
  4  BEGIN
  5  Save_FormField('SCOTT',ret);
  6  a:= ret;
  7  dbms_output.put_line(a);
  8  END;
  9  /
1

PL/SQL procedure successfully completed.

答案 1 :(得分:0)

看起来肯定会在update语句中直接抛出此错误。 您应该检查表中列的长度以及您尝试更新的值的长度。

还要注意返回值(returnval)。 如果update语句未更新任何记录,则为null。 在这种情况下,您可能需要考虑使用else块来设置另一个值。

答案 2 :(得分:0)

我知道现在有点晚了,但是我看不到答案,所以也许这对其他人有帮助。

如果要使用ODP.NET调用该过程,则只需设置out参数的长度。

一个例子:

 cmd.Parameters.Add("returnval", OracleDbType.Varchar2, 500, "", ParameterDirection.Output);

此处500是out参数的长度。希望有帮助。