sql >> Databasteknik >  >> RDS >> PostgreSQL

postgreSQL Fibonacci-sekvens - Fråga har ingen destination för resultatdata

Du är nära. I grund och botten din SELECT leder till ingenstans och din funktionshuvud säger att den ska returnera en INT värde. Eftersom det är en ren SQL fråga med CTE , det finns inget behov av att använda PLPGSQL , så jag ändrade också språktypen till 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);

EDIT: som efterfrågat, samma funktion som använder språket 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);



  1. Hur SQLite Ifnull() fungerar

  2. Hämta från databasen men varar bara 30 dagar

  3. Anslut till en Oracle DB med ODBC

  4. Extraherar värde från xml clob med Namespace med Oracle pl/sql