2014-09-11 48 views
0

我有一个存储过程如下值分配给输出参数的PL/SQL错误

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: 

returnval :='1'; 

是错?

+0

你将分配的返回值分配给了什么?需要查看完整的代码,包括过程被调用的位置/方式 – Sathya 2014-09-11 09:51:41

+0

您没有向我们展示引发错误的代码! – user272735 2014-09-11 11:23:18

+0

可能是来自更新语句的错误? – 2014-09-11 14:47:33

回答

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. 
+0

当我把这种具有空值的returnval参数这个误差产生,即 ' decalre' 'l_ret VARCHAR2(10):= NULL;'' begin' 'Save_FormField( '姓名', '年龄',l_ret);' '端;' 如果我改变 'l_ret VARCHAR2(10):= NULL;' 到 'l_ret VARCHAR2(10) :='1';' 那么这个错误不会来 – 2014-09-13 10:16:13

0

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

还要小心返回值(returnval)。 如果更新语句不更新任何记录,则它为空。 在这种情况下,您可能需要考虑一个else块来设置另一个值。

+0

在Update语句中没有错误,当我调用这个错误直到返回参数为null值时产生这个错误, 即 'decalre' 'l_ret varchar2(10):= null;' 'begin' 'Save_FormField('name' , '年龄',l_ret);' '端;' 如果我改变 'l_ret VARCHAR2(10):= NULL;' 到 'l_ret VARCHAR2(10):= '1'; ' 那么这个错误不会来 – 2014-09-13 10:15:48