gpt4 book ai didi

sql - postgreSQL 斐波那契数列 - 查询没有结果数据的目的地

转载 作者:行者123 更新时间:2023-11-29 12:24:18 25 4
gpt4 key购买 nike

所以我写了一个这样的斐波那契数列函数:

CREATE OR REPLACE FUNCTION fibonacci (lastN INTEGER) 
RETURNS int AS $$
BEGIN
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;
$$ LANGUAGE plpgsql;

但是当我打电话时:

SELECT * FROM fibonacci(20);

控制台显示:

ERROR:  query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function fibonacci(integer) line 5 at SQL statement

我认为 Return 语句应该返回查询结果,但事实并非如此。对于编写这样的 SQL 函数,我完全是个新手。

最佳答案

你很接近。基本上你的 SELECT 没有任何结果,你的函数头说它应该返回一个 INT 值。由于是使用CTE的纯SQL查询,没有必要使用PLPGSQL,所以我也把语言类型改成了 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);

编辑: 根据要求,使用语言 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);

关于sql - postgreSQL 斐波那契数列 - 查询没有结果数据的目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49307655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com