我想在 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
形式返回结果,因为您无法将 CURSOR
与 RETURNS 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/