一些有效的游标用途是什么?

时间:2014-01-24 17:21:12

标签: cursor rdbms

简短版

游标有哪些(真实的)有效用例?

长版

不久前,当我在我的数据库课程中,老师触及了游标主题时,我向她询问了有效的用例。她回答过使用游标进行演示:你有一个书籍数据库,你想要显示所有书籍,但是按作者“分组”,只显示一次作者姓名。 我不相信这个例子,因为在我看来,这些表示问题不属于数据库而是客户端(以非常方式显示它们的UI)。

我已经考虑了游标的有效用例,但我找不到任何我无法用更清晰的方式表达的游标。在我看来,使用游标会让你以“命令式”的方式思考,而不是大多数时候都应该思考的“声明性的,基于集合的”方式。

所以我想知道什么时候使用游标是好的。我更愿意听到真实的用例。

1 个答案:

答案 0 :(得分:1)

一般来说,你应该尽量避免使用游标,并尽可能使用基于set的标准SQL。

实际上需要的一种情况是,如果要在PostgreSQL的一个查询中返回多个结果。

CREATE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF refcursor AS $$
BEGIN
    OPEN $1 FOR SELECT * FROM table_1;
    RETURN NEXT $1;
    OPEN $2 FOR SELECT * FROM table_2;
    RETURN NEXT $2;
END;
$$ LANGUAGE plpgsql;