PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Sequenza di Fibonacci postgreSQL - La query non ha una destinazione per i dati dei risultati

Sei vicino. Fondamentalmente il tuo SELECT non porta da nessuna parte e l'intestazione della tua funzione dice che dovrebbe restituire un INT valore. Poiché è un puro SQL interrogare utilizzando CTE , non è necessario utilizzare PLPGSQL , quindi ho anche cambiato il tipo di lingua in 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);

MODIFICA: come richiesto, la stessa funzione utilizzando il linguaggio 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);