PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

postgreSQL Fibonacci Sequence - A consulta não tem destino para os dados do resultado


Você está perto. Basicamente seu SELECT está levando a lugar nenhum e seu cabeçalho de função diz que deve retornar um INT valor. Como é um SQL puro consulta usando CTE , não há necessidade de usar PLPGSQL , então também alterei o tipo de idioma para 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);

EDITAR: conforme solicitado, a mesma função usando a linguagem 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);