2013-03-14 2 views
-1

Это моя ХП:Oracle Stored Proc 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

Можете ли вы опубликовать полный код, который вы используете для вызова процедуры, и определить среду, из которой вы ее вызываете. –

+0

Параметры OUT - это переменные, декалированные в клиентской среде. Таким образом, ошибка лежит там, а не в коде, который вы опубликовали. – APC

ответ

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 процедура успешно завершен.