あなたは近くにいます。基本的にあなたのSELECT
はどこにもつながっておらず、関数ヘッダーはINT
を返すことになっていると言っています 価値。純粋なSQL
なので CTE
を使用したクエリ 、PLPGSQL
を使用する必要はありません 、言語タイプも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);
編集: 要求に応じて、言語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);