Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 编程 » 使用 SQL 进行应用程序开发 » SQL Anywhere 游标

 

游标敏感性示例:删除的行

此示例使用一个简单查询来阐释这样的情形:删除结果集中的某一行后,不同的游标会如何响应。

请看以下事件序列:

  1. 某个应用程序在以下针对示例数据库的查询中打开一个游标。

    SELECT EmployeeID, Surname
    FROM Employees
    ORDER BY EmployeeID;
    EmployeeID Surname
    102 Whitney
    105 Cobb
    160 Breault
    ... ...
  2. 应用程序通过游标读取第一行 (102)。

  3. 应用程序通过游标读取下一行 (105)。

  4. 另外一个事务删除了 102 号雇员(Whitney) 并提交了更改。

在此情况下游标操作的结果取决于游标敏感性:

  • 不敏感游标   在通过游标所看到的结果的成员资格中或值中,不反映这一 DELETE:

    操作 结果
    读取前一行 返回该行的原始副本 (102)。
    读取第一行(绝对读取) 返回该行的原始副本 (102)。
    读取第二行(绝对读取) 返回未更改的行 (105)。

  • 敏感游标   结果集的成员资格已经更改,因此,行 105 现在是结果集中的第一行:

    操作 结果
    读取前一行 返回 [未找到行]。没有前一行。
    读取第一行(绝对读取) 返回行 105。
    读取第二行(绝对读取) 返回行 160。

  • 对值敏感的游标   结果集的成员资格是固定的,因此行 105 仍是结果集的第二行。DELETE 反映在游标的值中,并在结果集中创建了一个有效洞。

    操作 结果
    读取前一行 返回 [没有当前的游标行]。在游标中过去曾经是第一行的地方有一个洞。
    读取第一行(绝对读取) 返回 [没有当前的游标行]。在游标中过去曾经是第一行的地方有一个洞。
    读取第二行(绝对读取) 返回行 105。

  • 敏感性未定型游标   对于更改,结果集的成员资格和值是不确定的。读取前一行、第一行或第二行的响应取决于查询的特定优化方法:该方法是否涉及工作表的构造,另外,所读取的行是否已从客户端预读。

    敏感性未定型游标的优点是,对于许多应用程序,敏感性是不重要的。特别是,如果您要使用只进、只读游标,将不会看到基础更改。此外,如果您在高隔离级别运行,那么将不允许基础更改。