游标在postgreSQL中的功能

时间:2016-06-11 23:14:09

标签: postgresql cursors

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

user

1 个答案:

答案 0 :(得分:1)

您根本不需要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;