游标是用于INSERT,UPDATE和DELETE语句吗?

时间:2016-09-05 09:31:49

标签: sql database oracle transactions cursors

我知道可以为SELECT语句创建游标(隐式或显式)。

但是也会为INSERT,UPDATE和DELETE操作创建游标(比如隐式)。如果他们做的就是目的。

要明确这个问题: SELECT语句可能导致一百万条记录并创建一个不敏感的(实际数据被复制)光标可以帮助将结果返回给客户端,因为客户端向前滚动或者向后,可以避免在单个网络请求中发送所有数据。 还欢迎任何其他值得一提的好处。
但是,写操作(INSERT,UPDATE和DELETE)是一个需要的游标,即使考虑并发性,它也不会成为资源的开销。如果操作必须失败,它就会提前失败。或者,对于事务隔离,它们是必需的。因此,通过创建游标可以保证原子性和一致性。 (并发性可以通过组合其他机制来处理,如2PL或MVCC等,但我现在更关注游标在事务中的角色

因此,似乎还需要考虑事务,每个事务都会导致创建游标(隐式)。或者给定其他机制来处理事务(有和没有并发),光标在处理事务时根本没有发言权或只是有限的角色。

1 个答案:

答案 0 :(得分:2)

几乎每个语句都必须创建/打开游标(甚至是DDL语句)。 游标是指向私有SQL区域的指针,该区域存储有关处理SELECT或数据操作语言(DML)语句(INSERT,UPDATE,DELETE或MERGE)的信息。

如果您没有创建显式游标,则使用隐式游标。隐式游标最有用和最常用的属性是%ROWCOUNT属性,它返回受影响的行数。

查看这些文档以获取更多信息。

Working with Cursors

SQL (Implicit) Cursor Attribute