postgresql - 从游标 PostgreSQL 获取行

标签 postgresql database-cursor

我有光标代码:

BEGIN;
DECLARE cliente_cursor 
CURSOR FOR SELECT * FROM cliente;

我想读取表“cliente”中的所有内容:

Table cliente

使用光标。 我有适用于 SQL Server 的代码:

DECLARE cliente_cursor CURSOR
      FOR SELECT * FROM cliente
OPEN cliente_cursor
FETCH NEXT FROM cliente_cursor;
While @@FETCH_STATUS=0
BEGIN
     FETCH NEXT FROM cliente_cursor;
End
CLOSE cliente_cursor
DEALLOCATE cliente_cursor

我想要一个 PostgreSQL 的工作代码。

我一直在寻找解决方案,看到人们通常建议使用函数。我想知道在这个 PostgreSQL DBMS 中是否有任何方法可以创建类似于 SQL Server 中的代码的东西。

我写了这段代码:

CREATE OR REPLACE FUNCTION MyFunction()
RETURNS setof cliente AS $$
DECLARE 
cursor_cliente CURSOR FOR SELECT * FROM cliente;
rec cliente%ROWTYPE;
 BEGIN
 OPEN cursor_cliente;
loop
--fetch the table row inside the loop
FETCH cursor_cliente INTO rec;
-- check if there is no record
   --exit from loop when record not found
   if not found then
        exit ;
   end if;
end loop;
RETURN;
END;
$$ LANGUAGE plpgsql;

但是当我运行它时,我只得到:

select MyFunction();

知道代码应该是什么吗?

Results

任何帮助将不胜感激!

最佳答案

CREATE OR REPLACE FUNCTION foo() RETURNS setof cliente 
   language plpgsql AS $$
DECLARE
  x cliente%rowtype ;
BEGIN 
  FOR x IN SELECT * FROM cliente loop
    RETURN NEXT x;
  END loop;
END $$;

SELECT * FROM foo();

也可以使用显式光标来完成。

CREATE OR REPLACE FUNCTION foo() RETURNS setof cliente
  language plpgsql as $$
DECLARE 
  x cliente%rowtype ;
  cliente_cursor CURSOR FOR SELECT * FROM cliente; 
BEGIN
  FOR x IN cliente_cursor loop
    RETURN NEXT x;
  END loop;
END $$;

SELECT * FROM foo();

该函数将持续存在,因此要么给它一个有用的名称并保留它,要么在完成后删除它。

如果您想要函数的私有(private)名称,pg_temp.foo 将对您的 session 私有(private)。

关于postgresql - 从游标 PostgreSQL 获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28005863/

相关文章:

postgresql - 在 Postgres 中对大表进行分区的标准和策略

asp.net - ASP Web 应用程序超时和可能的配置问题

postgresql - 为什么 PostgreSQL 不使用我的索引在某些排序规则下进行文本前缀搜索?

mysql - 从存储过程返回游标

SQL 游标使用临时表中的表和字段名称

sql - 在类型转换期间出现异常时,将条目添加到另一个表。 Postgres (PL/pgSQL)

node.js - Sequelize 中的内部连接查询引用多个表

mysql - 在 MYSQL 中不使用游标进行迭代

android - 从 Android sqlite 数据库中检索大 blob

python - 有没有更有效的方法在 Django 中根据条件参数数量编写此自定义 SQL?