しかしだからといって、桁数や精度を意識せずに使っていると、以下のようなエラーが発生することがあります。
ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しましたプロシージャやファンクションの引数の桁数や精度は、最大で取られるわけではなく、呼び出し側の定義を継承しています。
したがって、以下のようなプロシージャを
CREATE OR REPLACE PROCEDURE PROC1 ( p1 OUT VARCHAR2 ) IS BEGIN p1 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; p1 := 'ABC'; END; /
以下のようなPL/SQLブロックから呼び出すと、
DECLARE wk_value VARCHAR2(10); BEGIN PROC1( wk_value ); END; /
最初の代入文でORA-06502エラーが発生します。
大抵の場合、プロシージャやファンクションの引数の桁数や精度をさほど意識しなくても、無意識のうちにオーバーフローを起こさないような使い方をしていると思われますが、ごくまれにこういうエラーでハマってしまうことがあります。
特に呼び出しのネストが深いと気づきにくいので要注意です。