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

postgreSQL Fibonacci-sekvens - Forespørgsel har ingen destination for resultatdata

Du er tæt på. Dybest set din SELECT fører ingen steder hen, og din funktionsoverskrift siger, at den skal returnere en INT værdi. Da det er en ren SQL forespørgsel ved hjælp af CTE , er der ingen grund til at bruge PLPGSQL , så jeg ændrede også sprogtypen til 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 anmodet, den samme funktion med sproget 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. 4 funktioner til at formatere et tal til 2 decimaler i SQL Server

  2. Deaktiver native JSF-implementering af webLogic-server og brug myfaces-implementering

  3. Django-objektskabelse og Postgres-sekvenser

  4. Bedste måde at oprette konfigurationsfil (config.php) php