关于游标(特别是 Oracle 游标)的快速问题。
假设我有一个名为“my_table”的表,它有两列,一个 ID 和一个名称。有数百万行,但名称列始终是字符串“test”。
然后我运行这个 PL/SQL 脚本:
declare
cursor cur is
select t.id, t.name
from my_table t
order by 1;
begin
for cur_row in cur loop
if (cur_row.name = 'test') then
dbms_output.put_line('everything is fine!');
else
dbms_output.put_line('error error error!!!!!');
exit;
end if;
end loop;
end;
/
如果我在运行时运行此 SQL:
update my_table
set name = 'error'
where id = <max id>;
commit;
PL/SQL block 中的游标是否会拾取该更改并打印出“error error error”并退出?还是它根本不接收更改...或者它甚至允许更新 my_table?
谢谢!
最佳答案
游标有效地运行 SELECT,然后让您迭代结果集,结果集保存在数据库状态的快照中。因为您的结果集已经被获取,所以它不会受到 UPDATE 语句的影响。 (否则处理事情将需要您在每次移动光标时重新运行查询!)
参见:
关于database - 数据库游标是否获取基础数据的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1690822/