PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgreSQL Fibonacci-Folge – Abfrage hat kein Ziel für Ergebnisdaten

Du bist nah dran. Im Grunde Ihr SELECT führt ins Nirgendwo und Ihr Funktionsheader sagt, dass er einen INT zurückgeben soll Wert. Da es sich um ein reines SQL handelt Abfrage mit CTE , muss PLPGSQL nicht verwendet werden , also habe ich auch den Sprachtyp auf SQL geändert

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);

BEARBEITEN: Wie gewünscht, die gleiche Funktion mit der Sprache 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);