gpt4 book ai didi

postgresql - 在 postgreSQL 中使用游标的函数

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

我想在 postgreSQL 中创建一个函数,它使用游标读取查询结果并将结果返回到表中。我对游标不是很熟悉,但我已经做出努力没有结果。输出是一张空白表格。这是我的代码:

CREATE OR REPLACE FUNCTION getquery()
RETURNS TABLE(ID INT, Totalprice DECIMAL) AS $$

DECLARE
query_cursor CURSOR FOR SELECT CustomerID, TotalDue from SalesOrderHeader where TotalDue =( select max(TotalDue) from SalesOrderHeader);

BEGIN
OPEN query_cursor;

CLOSE query_cursor;

RETURN;
END;$$

LANGUAGE plpgsql;

最佳答案

您根本不需要CURSOR 来执行此操作,您甚至不需要函数。但是,如果您真的想要一个 CURSOR,那么您必须从中获取 FETCH 行并返回结果。您必须将结果作为 SETOF sometype 返回,因为您不能将 CURSORRETURNS TABLE 结合使用。 一般,看起来像这样:

CREATE TYPE soh AS (ID integer, Totalprice decimal);

CREATE FUNCTION getquery() RETURNS SETOF soh AS $$
DECLARE
query_cursor CURSOR FOR SELECT CustomerID, TotalDue FROM SalesOrderHeader
WHERE TotalDue = (select max(TotalDue) from SalesOrderHeader);
rec soh;
BEGIN
OPEN query_cursor;
FETCH query_cursor INTO rec.ID, rec.Totalprice; -- Read a row from the cursor
WHILE FOUND LOOP
RETURN NEXT rec; -- Return the data to the caller
FETCH query_cursor INTO rec.ID, rec.Totalprice; -- Keep on reading rows
END LOOP;
CLOSE query_cursor;
RETURN;
END;
$$ LANGUAGE plpgsql;

但是,您的查询将仅返回一行,因此此处不需要LOOP。你的查询会像这样更有效率:

SELECT CustomerID, TotalDue FROM SalesOrderHeader
ORDER BY TotalDue DESC LIMIT 1;

关于postgresql - 在 postgreSQL 中使用游标的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769291/

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