可滚动游标

在基于屏幕的新式应用程序中,用户在数据中前后滚动。 对于此类应用程序,返回到先前提取的行是一个问题。 一种可能性是关闭并重新打开游标,然后提取行,直到游标到达所需行。 另一种可能性是读取结果集,将其缓存在本地,并在应用程序中实施滚动。 这两种可能性仅适用于小型结果集,并且第二种可能性很难实现。 更好的解决方案是使用可滚动的游标,这种游标可以在结果集中向后和向前移动。

可滚动游标通常用于基于屏幕的新式应用程序,使用这些应用程序时,用户在数据中来回滚动。 但是,仅当仅向前游标不会执行该作业时,应用程序才应使用可滚动游标,因为可滚动游标通常比仅向前游标更昂贵。

向后移动的功能可引发不适用于仅向前游标的问题:可滚动游标是否可检测先前提取的行所做的更改? 也就是说,它是否应该检测已更新、已删除和新插入的行?

之所以会出现此问题,是因为结果集的定义(与特定条件匹配的行集)不会说明检查行是否与该条件匹配的时间,也不会指示行在每次提取时是否必须包含相同的数据。 前一项遗漏使得可滚动游标能够检测是否已插入或删除行,而后者则允许它们检测更新的数据。

检测更改的功能有时有用,有时没用。 例如,会计应用程序需要忽略所有更改的游标;账簿则不能使用显示最新更改的游标。 另一方面,航班预订系统需要一个游标来显示数据的最新更改;如果没有此类游标,它必须不断重新查询数据库来显示最新的航班情况。

为了满足不同应用程序的需求,ODBC 定义了四种不同类型的可滚动游标。 这些游标的费用和结果集更改的检测功能各不相同。 注意,如果可滚动游标能够检测行更改,那么它仅在尝试重新提取行时才能检测;数据源无法通知游标当前提取行的更改。 另请注意,更改的可见性还受事务隔离级别控制;有关详细信息,请参阅事务隔离

本部分包含以下主题。