【问题标题】:Is a possible to check number of rows affected by update query in oracle without executing the query是否可以在不执行查询的情况下在 oracle 中检查受更新查询影响的行数
【发布时间】:2021-11-22 03:14:38
【问题描述】:

我想在 oracle 中检查受更新查询影响的行数,而不执行生产环境的查询,可以吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以在更新查询上运行 EXPLAIN。其输出将包括查询管道每个步骤的行数等内容。此外,EXPLAIN 将使用表 统计数据 进行估算,而不是使用实际的生产表。

    【讨论】:

    • EXPLAIN 关键字对我不起作用,我收到 ORA-06550
    • @dev123 使用:EXPLAIN PLAN FOR UPDATE yourTable ...
    【解决方案2】:

    而不是UPDATE 使用具有相同WHERE 过滤器的SELECT 语句并使用COUNT(*) 来获取行数;您将获得准确的行数,而无需更新它们。

    您也可以使用表统计信息,但如果您的统计信息过时,那么给出的估计值可能无法准确反映实际行数。

    【讨论】:

      【解决方案3】:

      您可以参考v$sql 表来查看查询历史记录或作为Explain 的上述答案之一。

      另外,您可以创建一次性手动触发器并将其设置为更新表以在更新时生效

              Eg. Create Trigger tname 
                     After Update
                     on
                     Table for each row
      
                     ..... SELECT count(:new.id)...etc
      

      【讨论】:

      • “获取 sql 历史记录”如何返回受联合国执行更新影响的行数? AFTER UPDATE 触发器如何返回受 UN 执行的更新影响的行数?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2017-04-13
      • 2013-02-16
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      相关资源
      最近更新 更多