Skip to main content
Skip table of contents

VARIADIC Procedure Parameters

Instead of using just an IN parameter, the last non-optional parameter can be declared VARIADIC to indicate that it can be repeated 0 or more times when the procedure is called positionally.

Here's an example procedure:

SQL
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;

This example procedure illustrates that the VARIADIC parameter may be used as a regular array: indexing with [] (line 9) and array_length() (lines 6 and 7) function perfectly work with it. Note that the first array element has index 1.

Here are several sample results that are generated by the procedure:

1. Call:

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

Output:

v
aaa
3
10
20
33

2.  Call:

SQL
CALL views.p1('title', 10)

Output:

v
title
1
10

3. Call:

SQL
CALL views.p1('zzz')

Output:

v
zzz
0

Instead of using just an IN parameter, the last non-optional parameter can be declared VARIADIC to indicate that it can be repeated 0 or more times when the procedure is called positionally.

Here's an example procedure:

SQL
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;

This example procedure illustrates that the VARIADIC parameter may be used as a regular array: indexing with [] (line 9) and array_length() (lines 6 and 7) function perfectly work with it. Note that the first array element has index 1.

Here are several sample results that are generated by the procedure:

1. Call:

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

Output:

v
aaa
3
10
20
33

2.  Call:

SQL
CALL views.p1('title', 10)

Output:

v
title
1
10

3. Call:

SQL
CALL views.p1('zzz')

Output:

v
zzz
0
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.