2011-02-08 129 views
-1

假設表格「來源」每小時用一個就地過程填充數據。我想運行一個程序,每次執行專業版時,只用目標表SOURCE的新行來填充我的新表'NEW',但要記住,新表必須始終保持已插入數據的所有時間我的意思是每次插入進程的解決方案... NEW然後插入到臨時表中不同的值,刪除NEW,從temp等插入是沒有用的)。plsql-從其他表格數據中提取表格

回答

1

如果我得到了你想要的東西,而且只會插入從SOURCE到NEW的新記錄,有很多方法可以做到這一點。這裏有一些:

1)在SOURCE上創建一個自動插入到NEW的觸發器,所以你不必擔心一件事情。 2)使用像這樣的語句來僅從SOURCE中選擇新的行。這個假定兩個表上的主鍵都是相同的。

INSERT INTO NEW 
SELECT * FROM SOURCE s1 WHERE NOT EXISTS (SELECT 1 FROM NEW n1 WHERE n1.key=s1.key) 

3)使用物化視圖& mv日誌功能。這個有點複雜,如果你不熟悉它,我建議你查看一下oracle文檔或其他資源。

4)改變你插入SOURCE的程序也插入到NEW中。

當然,如果SOURCE上有可能的更新,你必須弄清楚該怎麼做。如果你願意,我可以詳細解釋這些方法。

0

註冊dsmoljanovic的解決方案。 程序性解決方案(帶有時間戳或序列)對此不利的一個原因是未提交數據。

拿一個例子:

At 02:55:00: 75 rows are added to SOURCE and are timestamped '02:55:00' 
At 02:55:30: The 75 row insert is committed 
At 02:59:55: 100 rows are added to SOURCE and are timestamped '02:59:55' 
At 03:00:00: Your process kicks off and selects from source 
At 03:00:20: The 100 row insert is committed 

過程中不會看到那些100行(因爲它們沒有提交),並在下一次運行時,如果它看起來對03後的時間戳列可能會錯過他們:00:00。