2013-03-14 37 views
-1

這是我的存儲過程:的Oracle存儲過程的Varchar 3個字符的限制

CREATE OR REPLACE 
PROCEDURE "YOUQI_SP" 
(
    INPUT1 IN VARCHAR2, 
    INPUT2 IN VARCHAR2, 
    OUTPUT1 OUT VARCHAR2 
) 
AS 
BEGIN 
    OUTPUT1 := INPUT1 || INPUT2; 
    DBMS_OUTPUT.PUT_LINE('INPUT1 : ' || INPUT1); 
    DBMS_OUTPUT.PUT_LINE('INPUT2 : ' || INPUT2); 
    DBMS_OUTPUT.PUT_LINE('OUTPUT1 : ' || OUTPUT1); 
END YOUQI_SP; 

有執行沒問題:BEGIN YOUQI_SP('a', 'bc', :output1); END;。這裏的結果:

Array 
(
    [output1] => abc 
) 
Array 
(
    [0] => INPUT1 : a 
    [1] => INPUT2 : bc 
    [2] => OUTPUT1 : abc 
) 

但是,如果我添加一個或多個字符來輸入,我會收到錯誤:

[code] => 6502 
[message] => ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at "YOUQI_SP", line 9 ORA-06512: at line 1 

這進一步通過直接OUTPUT1分配變量證明。它只能保存最多3個字符。任何想法如何讓它返回超過3個字符?謝謝!

+0

您可以發佈您用來調用過程的完整代碼,並確定您從中調用它的環境。 – 2013-03-14 11:39:35

+0

OUT參數是調用中的變量,即客戶端環境中的變量。所以錯誤在那裏,而不是你發佈的代碼中。 – APC 2013-03-14 12:58:21

回答

2

看來你的輸出變量太短了。考慮:

SQL> var output1 varchar2(2) 
SQL> BEGIN YOUQI_SP('aXXX', 'bcXXXX', :output1); END; 
    2/
BEGIN YOUQI_SP('aXXX', 'bcXXXX', :output1); END; 
* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character string buffer too small 
ORA-06512: at "TEST1.YOUQI_SP", line 9 
ORA-06512: at line 1 


SQL> var output1 varchar2(30) 
SQL> BEGIN YOUQI_SP('aXXX', 'bcXXXX', :output1); END; 
    2/
INPUT1 : aXXX 
INPUT2 : bcXXXX 
OUTPUT1 : aXXXbcXXXX 

PL/SQL過程已成功完成。