【问题标题】:How to query only updated or new rows in Oracle如何在 Oracle 中仅查询更新的或新的行
【发布时间】:2013-08-01 13:57:18
【问题描述】:

在我的项目中,我需要运行一个 cron 作业 - 它将在午夜查询 Table 并从选定的行中创建数据对象。

此表的大小将在一段时间内增长 - 因此目的是仅查询(选择)那些新行或自上次运行以来已更新的行。

oracle 有没有办法做到这一点。

问候

【问题讨论】:

  • 您的表格是否有时间戳字段显示上次更新时间;如果没有,可以添加一个吗?

标签: sql oracle data-objects


【解决方案1】:

一个想法是在表中设置一个标志,当行已被处理时设置为 TRUE。然后可以使该过程仅在未处理的 (FALSE) 行上运行,而不管日期如何(以防午夜运行由于某种原因而失败)。

【讨论】:

    【解决方案2】:

    oracle system change number 应该可以帮助您。 与支持表一起使用:

        create table support_table (
             m_pk     master_table.master_pk%TYPE
           , supp_scn NUMBER
        );
    

    在设置工具期间以及以后每次批处理运行后,向支持表提供有关对主表中记录所做的最后一次更改的信息:

        delete
          from support_table
             ;
        insert
          into support_table ( m_pk, supp_scn ) 
               select master_pk
                    , ORA_ROWSCN
                 from master_table
             ;
    

    检查哪些行已更改:

        select m.master_pk
             , ORA_ROWSCN       scn
          from master_table  m
     left join support_table supp   ON ( supp.m_pk = mthen.master_pk )
         where supp.m_pk IS NULL
            OR supp.supp_scn <> m.master_pk
             ;
    

    该结果集将包含已更改记录的master_pks 以​​及自上次检查以来添加的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      相关资源
      最近更新 更多