Je bent dichtbij. In principe uw SELECT
leidt naar nergens en je functiekop zegt dat het een INT
. moet retourneren waarde. Omdat het een pure SQL
is opvragen met CTE
, het is niet nodig om PLPGSQL
te gebruiken , dus ik heb ook het taaltype gewijzigd in SQL
CREATE OR REPLACE FUNCTION fibonacci (lastN INTEGER)
RETURNS SETOF INTEGER LANGUAGE SQL AS $$
WITH RECURSIVE t(a, b) AS (
VALUES(0,1)
UNION ALL
SELECT GREATEST(a, b), a + b AS a from t
WHERE b < $1
)
SELECT a FROM t;
$$;
SELECT fibonacci(20);
BEWERKEN: zoals gevraagd, dezelfde functie in de taal PLPGSQL
CREATE OR REPLACE FUNCTION fibonacci (lastN INTEGER)
RETURNS SETOF INT LANGUAGE PLPGSQL AS $$
BEGIN
RETURN QUERY WITH RECURSIVE t(a, b) AS (
VALUES(0,1)
UNION ALL
SELECT GREATEST(a, b), a + b AS a from t
WHERE b < $1
)
SELECT a FROM t;
END $$;
SELECT fibonacci(20);