2013-08-01 34 views
0

在我的項目中,我需要運行一個cron作業 - 它將在午夜查詢Table並從所選行中創建數據對象。如何在Oracle中查詢更新或新行

這張表的大小會隨着時間的推移而增長 - 因此意圖是僅查詢(選擇) - 自上次運行以來已更新的新行或那些行。

在oracle中有沒有辦法做到這一點。

問候

+2

您的表格是否有時間戳字段,顯示上次更新的時間;如果不是,可以添加嗎? –

回答

0

一個想法是有一個標誌,當行已被處理時設置爲TRUE表。然後,可以使該過程僅在未處理(FALSE)行上運行,而不管日期(由於某種原因午夜運行失敗)。

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 s已更改的記錄和自上次檢查後添加的記錄。