简短版
游标有哪些(真实的)有效用例?
长版
不久前,当我在我的数据库课程中,老师触及了游标主题时,我向她询问了有效的用例。她回答过使用游标进行演示:你有一个书籍数据库,你想要显示所有书籍,但是按作者“分组”,只显示一次作者姓名。 我不相信这个例子,因为在我看来,这些表示问题不属于数据库而是客户端(以非常方式显示它们的UI)。
我已经考虑了游标的有效用例,但我找不到任何我无法用更清晰的方式表达的游标。在我看来,使用游标会让你以“命令式”的方式思考,而不是大多数时候都应该思考的“声明性的,基于集合的”方式。
所以我想知道什么时候使用游标是好的。我更愿意听到真实的用例。
答案 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;