IN パラメータだけを使用する代わりに、最後の非オプションパラメータを VARIADIC と宣言することで、プロシージャが位置的に呼び出されたときに 0 回以上繰り返すことができることを示すことができます。

手順の例を示します:

CREATE virtual procedure views.p1 (title string, VARIADIC data integer) RETURNS (v string) AS
BEGIN
DECLARE integer i = 1;
CREATE local temporary table #t (v string);
INSERT INTO #t select title;
INSERT INTO #t select array_length(data);
WHILE (i <= array_length(data))
BEGIN
INSERT INTO #t SELECT data[i];
i = i + 1;
END
SELECT * FROM #t;
END;

 VARIADIC  [] (9行目) と (6行目と7行目) を使ったインデックス付けが完璧に機能します。  array_length() 配列の最初の要素のインデックスが1であることに注意してください。

以下は、このプロシージャで生成される結果のサンプルです。

コール

CALL views.p1('aaa', 10, 20, 33)

は次のような出力結果セットを与えます:

v

aaa

3

10

20

33


コール

CALL views.p1('title', 10)

は次のような出力結果セットを与えます:

v

title

1

10


コール

CALL views.p1('zzz')

は次のような出力結果セットを与えます:

v

zzz

0