【发布时间】:2025-11-25 06:00:02
【问题描述】:
我知道可以为 SELECT 语句创建游标(隐式或显式)。
但是游标(比如隐式)是否也会为 INSERT、UPDATE 和 DELETE 操作创建。如果他们这样做有什么目的。
要明确这个问题: SELECT 语句可能会产生一百万条记录,并且创建不敏感(复制实际数据)游标有助于在客户端向前滚动时将结果返回给客户端或向后,可以避免在单个网络请求中发送所有数据。 欢迎任何其他值得一提的好处。
但是写入操作(INSERT、UPDATE 和 DELETE)是必需的游标,即使考虑并发性,这不会是资源开销吗?如果操作必须失败,它只会提前失败。或者是否需要它们进行事务隔离。因此,通过创建游标来保证原子性和一致性。 (并发可以通过 2PL 或 MVCC 等其他机制的组合来处理,但我现在更关注游标在事务中的作用)
因此,似乎还需要考虑事务,每个事务都会导致创建游标(隐式)。或者考虑到存在其他处理事务的机制(有和没有并发),游标在处理事务时根本没有发言权或只是有限的作用。
【问题讨论】:
-
您说的是 PL/SQL 中的游标还是 Oracle 在后端创建的“游标”,本质上与解析语句相同?
-
@a_horse_with_no_name,本质上是想了解游标是什么以及它们如何提供帮助。不会做太多 PL/SQL,但知道不会有什么坏处,除非它们与 SQL 使用它们的方式完全不同
标签: sql database oracle transactions cursors