【发布时间】:2021-11-22 03:14:38
【问题描述】:
我想在 oracle 中检查受更新查询影响的行数,而不执行生产环境的查询,可以吗?
【问题讨论】:
我想在 oracle 中检查受更新查询影响的行数,而不执行生产环境的查询,可以吗?
【问题讨论】:
您可以在更新查询上运行 EXPLAIN。其输出将包括查询管道每个步骤的行数等内容。此外,EXPLAIN 将使用表 统计数据 进行估算,而不是使用实际的生产表。
【讨论】:
EXPLAIN PLAN FOR UPDATE yourTable ...
而不是UPDATE 使用具有相同WHERE 过滤器的SELECT 语句并使用COUNT(*) 来获取行数;您将获得准确的行数,而无需更新它们。
您也可以使用表统计信息,但如果您的统计信息过时,那么给出的估计值可能无法准确反映实际行数。
【讨论】:
您可以参考v$sql 表来查看查询历史记录或作为Explain 的上述答案之一。
另外,您可以创建一次性手动触发器并将其设置为更新表以在更新时生效
Eg. Create Trigger tname
After Update
on
Table for each row
..... SELECT count(:new.id)...etc
【讨论】: