如何仅查询Oracle中的更新行或新行

时间:2013-08-01 13:57:18

标签: sql oracle data-objects

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

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

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

问候

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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_pk以及自上次检查后添加的记录。