web-dev-qa-db-ja.com

Oracleのストアドプロシージャのデフォルト値

stored procedure 次のように。

 CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',Y IN NUMBER DEFAULT 1) AS
 BEGIN
 DBMS_OUTPUT.PUT_LINE('X'|| X||'--'||'Y'||Y);
 END;

上記の手順を実行すると

 EXEC TEST(NULL,NULL);

X--Y。入力パラメーターがnullの場合、入力パラメーターは、プロシージャシグネチャで指定された値にデフォルト設定されません。 default値の使用は何ですか? null値を入力として渡し、null値をdefault値で置き換えたい場合はどうなりますか?

26
user1118468

デフォルト値は、引数が指定されていない場合にのみ使用されます。あなたの場合、did引数を指定します-両方ともNULLの値が指定されました。 (はい、この場合、NULLは実際の値と見なされます:-)。試してください:

EXEC TEST()

共有してお楽しみください。

補遺:プロシージャパラメータのデフォルト値は、どこかのシステムテーブルに確実に埋め込まれます(SYS.ALL_ARGUMENTS view)、ただし、ビューからデフォルト値を取得するには、LONGフィールドからテキストを抽出する必要があり、おそらくそれが価値があるよりも苦痛であることが判明するでしょう。 easyの方法は、手順にコードを追加することです。

CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',
                                 Y IN NUMBER DEFAULT 1)
AS
  varX VARCHAR2(32767) := NVL(X, 'P');
  varY NUMBER          := NVL(Y, 1);
BEGIN
  DBMS_OUTPUT.PUT_LINE('X=' || varX || ' -- ' || 'Y=' || varY);
END TEST;
50
Bob Jarvis