Returning sets
When you write a set returning function, there are some differences from a normal scalar function. Let's first take a look at returning a set of integers.
Returning a set of integers
We will revisit our Fibonacci number generating function, but this time we will not return just the nth number, but the whole sequence of numbers up to the nth number.
CREATE OR REPLACE FUNCTION fibonacci_seq(num integer)
RETURNS SETOF integer AS $$
DECLARE
a int := 0;
b int := 1;
BEGIN
IF (num <= 0)
THEN RETURN;
END IF;
RETURN NEXT a;
LOOP
EXIT WHEN num <= 1;
RETURN NEXT b;
num = num - 1;
SELECT b, a + b INTO a, b;
END LOOP;
END;
$$ language plpgsql;The first difference we see is that instead of returning a single integer value, this function is defined as returning a SETOF integer.
Then if you examine the code carefully, you see that there are two different types of RETURN statements. First is the ordinary RETURN function in the following code snippet...