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 |