0

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

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

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

问候

4

2 回答 2

0

oracle系统更改号应该可以 帮助您。与支持表一起使用:

    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更改记录的 s 以及自上次检查以来已添加的记录。

于 2013-08-01T14:20:03.603 回答
0

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

于 2013-08-01T14:10:05.887 回答