使用 PostgreSQL 中的查询在打开的游标中定位

发布于 2024-11-09 21:51:11 字数 319 浏览 1 评论 0原文

我在查询上声明了一个游标,并希望使用同一个表上的另一个查询在该打开的游标中重新定位,例如

这是我的游标;

DECLARE mycursor CURSOR FOR SELECT * FROM mytable order by somedate;

这就是我想要达到的位置: select ROWNUMBER() from mytable where name = "fred"

使用 ROWNUMBER() (或其他构造)我想在打开的光标中定位。

我知道我可以使用“获取/移动”在光标内定位,但定位不是绝对的。

这可以做到吗?

I have a cursor declared on a query and want to re-position within that open cursor using another query on the same table, e.g.

Here is my cursor;

DECLARE mycursor CURSOR FOR SELECT * FROM mytable order by somedate;

This is the position I want to get to:
select ROWNUMBER() from mytable where name = "fred"

Using ROWNUMBER() (or some other construct) I want to position in my open cursor.

I know I can use Fetch/Move to position within my cursor but the positioning is not absolute.

Can this be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

权谋诡计 2024-11-16 21:51:11

除非我读错了你的问题,否则你能做的最好的事情就是:

DECLARE mycursor CURSOR FOR
SELECT *, rank() OVER (ORDER BY somedate) FROM mytable ORDER BY somedate;

如果你提前知道行号,你可以通过 move/fetch 直接跳到它;如果您不知道但想知道它,您可以使用 as you fetch 来访问它。

也就是说,请注意查询本身会变慢。因此,如果您已经知道行的位置,那么最好使用 limit/offet;如果您不知道,则最好在离开应用程序时计算行数。

Unless I'm reading your question wrong, the best you can do is this:

DECLARE mycursor CURSOR FOR
SELECT *, rank() OVER (ORDER BY somedate) FROM mytable ORDER BY somedate;

If you know the row number in advance you can jump straight to it with move/fetch; and if you don't but want to know it, you can access it using as you fetch.

That said, note that the query itself will be slower. So you'll be better off with a limit/offet if you already know the position of your row, or counting the rows as you go from your app if you don't.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文