関数パラメータは の任意のサイズにすることができ、varchar2
それは実行時までわからないため、できません。
値が後でどのように使用されるかがわかっている場合は、テーブルの列に基づいて値を制限できる場合があります。したがって、最終的に select from table で使用される場合は、次のpeople
ように宣言できます。
g_lastname people.last_name%type;
関数宣言でその構文を使用することもできます。
FUNCTION search(p_lastname IN people.last_name%type) return VARCHAR2
...ただし、実際には渡すことができる値のサイズを制限していません。の値p_lastname
が大きすぎると、割り当ては失敗します。おそらく、このシナリオのある時点で失敗する必要があり、後でselect
. ただし、コードにある程度の一貫性があり、(IMO) グローバルとパラメーターの意図が示されます。これは、後でメンテナンスとトラブルシューティングに役立ちます。
エラーを回避したいだけの場合は、渡された値が長すぎる場合に切り捨てるオプションがあります。
g_lastname := substr(p_lastname, 1, 15);
... または最初に長さをテストしますが、マジック ナンバーは正確には理想的ではありません ( の定義を変更する場合g_lastname
は、その長さに依存するものを見つけて置き換えることを忘れないでください)。または例外をキャッチして何かをします。
それ以外の場合は、最大で、考えられるよりも大きく宣言するだけで大きなマイナス面はありません。
g_lastname varchar2(32767);
おそらく、現実的なより小さな最大長を考え出すことができますが、値が必要になることはありません (もちろん、誰かが要件を変更するまでは!)。ドキュメントでは、大きな変数のメモリ割り当てについて説明しています。