PostgreSQL游标

Kar*_*arl 12 sql postgresql cursor

我正在尝试使用PostgreSQL学习基本游标.这是我的脚本:

DECLARE cur_employees CURSOR FOR
  SELECT *
  FROM   employee

CLOSE cur_employees 
Run Code Online (Sandbox Code Playgroud)

我想遍历列表并输出那些活跃的列表.我应该从哪里开始?

ara*_*nid 26

你很少想在PostgreSQL中显式使用游标,即使在plpgsql中处理查询结果时也是如此.这与许多其他几乎一直使用的SQL数据库形成鲜明对比.

在plpgsql中,您可以简单地写一些类似于:

DECLARE
  emp employee%rowtype;
BEGIN
  FOR emp IN SELECT * FROM employee LOOP
    IF emp.active THEN
      RAISE INFO 'Active: %', emp.employee_id
    END IF;
  END LOOP;
END
Run Code Online (Sandbox Code Playgroud)

在上面,plpgsql语言处理程序处理打开,绑定,获取和关闭自身(更多关于声明控制结构).

使用9.0中的PostgreSQL,您可以使用"DO"块简单地执行plpgsql.对于以前的版本,您需要创建一个函数并选择它.如果您正在寻找PostgreSQL等效的,例如,在SQL Server上使用游标迭代结果,就是这样.请注意,迭代等不是 SQL方言的一部分,只是plpgsql(或任何其他emebedded语言)的一部分.

SQL级别的"DECLARE CURSOR xxx"语法可以像这样使用:

DECLARE cur_employees CURSOR FOR SELECT * FROM employee;
FETCH NEXT FROM cur_employees;
// etc..
CLOSE cur_employees;
Run Code Online (Sandbox Code Playgroud)

这可以用于仔细获取查询结果集的一部分.但是,使用它们并不常见,因为通常您的客户端驱动程序将提供某种功能来执行此操作(例如JDBC中的可滚动结果集).您也可以从类似于Oracle的函数返回游标,尽管这也是一个相对罕见的用例.