2017-01-25 11 views
0

3つのパラメータを受け取るストアド・プロシージャがOracle Databaseにあります。Oracle PL/SQLのストアド・プロシージャで渡されるパラメータの数を知ることはできますか?

私はそれを1から3のパラメータで呼び出すことができますが、デフォルトで何個の引数が実際に渡されたのかを知ることは可能でしょうか?例えば

  • ダミー(1)いくつかのキーワードが私 "1"
  • ダミー(1,2,3)が私に "3"

を言うと言う、私はこれを尋ねるため私はInformix 4GLを使っていましたが、受け取った引数の数を知るために "NARGS"を使うことができました。

+0

あなたはSP内の議論番号を知りたいのですか? –

+0

はい、それは問題です。私は引数の数に応じていくつかのコードを実行するためにそれを知る必要があります。 Thanks –

+2

次に、デフォルト値をnullに設定し、パラメータがnullかどうかを確認します。 – OldProgrammer

答えて

1

NARGSまたは "C" argcと同等のものはありません。

デフォルトのヌル値を使用している場合、デフォルト値と同じではない引数の数を手動で数えることができますが、デフォルト値をパラメータとして明示的に渡すかどうかは分かりません。

私は2つのソリューションを考えることができます。 1.ユーザーオーバーロードされた手順..すなわち

procedure a (p_1 number); 
procedure a (p_1 number, p_2 number); 
procedure a (p_1 number, p_2 number, p_3 number); 

はその後、遺体にはあなたがである1で「知っている」でしょう。

オプション2.パス単一の引数として可変長配列/ PLSQLテーブルが、実際に引数を渡すことは問題になります。

create or replace package x 
is 

type an_arg is record (n number, v varchar2(2000), d date); 
type args is table of an_arg; 

procedure a(argv args); 

end; 
/

create or replace package body x 
is 

procedure a(argv args) 
is 
begin 
    dbms_output.put_line('i was passed '||argv.count||' arguments'); 

end; 

end; 
/