gpt4 book ai didi

sql - 什么时候执行游标中的查询?

转载 作者:行者123 更新时间:2023-12-04 13:33:09 24 4
gpt4 key购买 nike

假设我有类似的东西:

CURSOR foo_cur IS
SELECT * FROM foo;

...

DELETE FROM foo WHERE bar=1;

FOR row IN foo_cur
LOOP
...
END LOOP;

如果我从 foo 中删除行在我打开游标之前,这些行是否仍然是游标结果的一部分?是查询 SELECT * FROM foo在行 FOR row IN foo_cur 处执行?

最佳答案

将从游标返回的行集在游标打开时确定(通过显式 OPEN 或隐式由 FOR 循环)。在这种情况下,您删除的行将不会在您的循环中返回。

通常,查询不会一次全部执行。 Oracle 执行足够多的查询以获取下一组行,将这些行返回给 PL/SQL VM,并等待请求来获取更多行。在 11g 中,Oracle 会做一个隐式 BULK COLLECT一次 100 行,所以每 100 次循环迭代,查询就会进一步执行,直到没有更多行要返回。由于多版本读取一致性,即使在您的代码运行时其他 session 正在进行和提交更改,Oracle 也会始终将数据返回给您,因为它在打开游标时存在。

关于sql - 什么时候执行游标中的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com