-1

これは私のストアドプロシージャです:

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
)

しかし、入力にもう 1 文字追加すると、次のエラーが表示されます。

[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

これは、 variable を に直接代入することでさらに証明されましたOUTPUT1。最大3文字までしか保持できません。3文字以上を返すにはどうすればよいですか? ありがとう!

4

1 に答える 1

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 プロシージャが正常に完了しました。

于 2013-03-14T11:39:34.757 に答える