IN パラメータだけを使用する代わりに、最後の非オプションパラメータを VARIADIC と宣言することで、プロシージャが位置的に呼び出されたときに 0 回以上繰り返すことができることを示すことができます。
手順の例を示します:
CREATE virtual procedure views.p1 (title string, VARIADIC data integer) RETURNS (v string) ASBEGIN 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 |