database - 数据库游标是否获取基础数据的更改?

标签 database oracle cursors

关于游标(特别是 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 语句的影响。 (否则处理事情将需要您在每次移动光标时重新运行查询!)

参见:

http://www.techonthenet.com/oracle/cursors/declare.php

关于database - 数据库游标是否获取基础数据的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1690822/

相关文章:

mysql - 合并具有冲突 ID 的 SQL 数据库

sql - 删除权重超过限制的行,直到没有这样的行

Oracle SQL 语法 : V$ views

SQL Server 游标将值包含在选择中

javascript - Web 服务器代码无法正常工作

mysql - 查询以查找处于多个状态的湖泊

sql - 我如何创建这个复杂的查询?

database - ORA-00060 : deadlock detected while waiting for resource

c# - 在 C# Windows 应用程序中使用自定义彩色光标

python - 游标在 Python 的 DB-API 中是如何工作的?