我有一个存储过程如下
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';
是不是错了?
答案 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参数的长度。希望有帮助。