PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

postgreSQL Fibonacci Sequence - La requête n'a pas de destination pour les données de résultat

Tu es proche. Fondamentalement, votre SELECT ne mène nulle part et votre en-tête de fonction indique qu'il est censé renvoyer un INT évaluer. Puisqu'il s'agit d'un pur SQL requête utilisant CTE , il n'est pas nécessaire d'utiliser PLPGSQL , j'ai donc également changé le type de langage en 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);

MODIF : comme demandé, la même fonction en utilisant le langage 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);