sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL Secuencia de Fibonacci:la consulta no tiene destino para los datos de resultados

Estás cerca. Básicamente tu SELECT no conduce a ninguna parte y el encabezado de su función dice que se supone que debe devolver un INT valor. Dado que es un SQL puro consulta usando CTE , no hay necesidad de usar PLPGSQL , así que también cambié el tipo de idioma a 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: según lo solicitado, la misma función usando el lenguaje 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);