我想学习使用PostgreSQL的基本游标。这是我的脚本:PostgreSQL游标
DECLARE cur_employees CURSOR FOR
SELECT *
FROM employee
CLOSE cur_employees
我想遍历列表并输出那些活动的。我应该从哪里开始?
我想学习使用PostgreSQL的基本游标。这是我的脚本:PostgreSQL游标
DECLARE cur_employees CURSOR FOR
SELECT *
FROM employee
CLOSE cur_employees
我想遍历列表并输出那些活动的。我应该从哪里开始?
即使在处理plpgsql中的查询结果时,您也很少想在PostgreSQL中显式使用游标。这与其他许多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
在上面,用开放的PLPGSQL语言处理程序交易,绑定,读取和关闭本身(更多declarations,并且control structures)。
使用9.0版的PostgreSQL,您可以简单地使用“DO”块来执行plpgsql。对于以前的版本,您需要创建一个函数并将其选中。例如,如果您正在寻找PostgreSQL等价物,那么在SQL Server上使用游标迭代结果,就是这样。请注意,迭代等是而不是 SQL方言的一部分,只是plpgsql(或任何其他嵌入式语言)的一部分。
在SQL级别“声明CURSOR XXX”语法可以这样使用:
DECLARE cur_employees CURSOR FOR SELECT * FROM employee;
FETCH NEXT FROM cur_employees;
// etc..
CLOSE cur_employees;
这可以用来仔细得到的只是查询结果集的一部分。然而,使用它们是不寻常的,因为通常你的客户端驱动程序会提供某种功能来完成这个功能(例如JDBC中的可滚动结果集)。您也可以从类似于Oracle的函数中返回游标,尽管这也是相当少见的用例。
+1高质量的答案再次。 – 2011-12-27 16:55:49
请记住,人们尝试使用cusors的90%以上会更好地处理基于集合的操作。你几乎不应该考虑循环数据集,除了有经验的dba以外,没有人应该考虑写一个游标。这是一种技术,除非你非常高级,并且知道何时适合,否则你不应该学习。如果您刚刚学习SQl,请跳过这个约十年。 – HLGEM 2015-02-09 22:17:06
通常,对游标有一个DECLARE,然后是游标的OPEN(实现结果集),多次FETCH操作以从结果集中单独检索行,然后执行光标的CLOSE 。
您似乎有一个DECLARE后跟一个CLOSE。因此,你的语法错误,因为你从来没有做过OPEN。
Hm。 Karl没有提及他是想用SQL还是用pl/pgsql来使用游标。对于SQL,没有“OPEN”,因为这是由'DECLARE'隐式完成的。 – 2011-12-25 22:13:41
首先添加一个WHERE子句,选择活动的子句。 – aib 2011-12-24 12:41:39
阅读[手册中关于游标的章节](http://www.postgresql.org/docs/9.1/interactive/plpgsql-cursors.html)。 – 2011-12-24 14:01:37
我照你说的我:DECLARE cur_employees CURSOR FOR SELECT * FROM员工 其中活跃= '主动' CLOSE cur_employees 但我收到以下错误: – Karl 2011-12-24 14:39:24