2014-09-11 54 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