postgresql - postgreSQL中带游标的函数

标签 postgresql cursors

我想在 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/

相关文章:

django - Docker 容器中的 Nginx 出现 `connection reset` 错误,但在没有容器的情况下工作正常

java - 使用 Java 从 postgreSQL 检索 inet 数据类型?

windows - 油漆桶光标?

indexedDB - objectStore.openCursor() 不会返回 objectStore 中的所有对象

ruby-on-rails - Rails Postgres 插入重复行检查问题

sql - 为什么此代码在 PostgreSQL 中失败以及如何修复它(解决方法)?是 Postgres SQL 引擎缺陷吗?

bash - 将来自 postgresql 的值存储在 bash 变量中

加载表单时 C# WaitCursor

mysql - 在 MySQL 中使用游标时从 DECLARE 语句调用存储过程

python - python/arcpy SQL 表达式中的循环无效,选择不起作用