我有一個用例,我需要通過運行帶有 where 子句的 select 陳述句來監視 oracle 資料庫 XYZ 中的表 A。如果此 select 陳述句獲取任何行,那么我需要立即將這些行插入到另一個表 B 中,該表是另一個 Oracle 資料庫 MNO。
另外,假設當我在監視中并且第二次相同的 select 陳述句檢索到已在上述步驟中插入的行但現在它更改了幾列的值時,立即另一個表 B 也應該使用此更新更新表 A 中的列值。
我可以使用 shell 腳本來實作這一點嗎?任何人都可以讓我知道如何實作這一目標嗎?
非常感謝您提前提出建議。
uj5u.com熱心網友回復:
我會說這merge就是你需要的:
merge into mno.table_2 b -- or, possibly, table_2@mno
using table_1 a
on (a.id = b.id)
when matched then update set
(b.col1 = a.col1,
b.col2 = a.col2
)
when not matched then insert (col1, col2)
values (a.col1, a.col2);
注意第 1 行:
- 如果
mno確實是“資料庫”(而不僅僅是同一資料庫中的另一個用戶),那么您必須使用資料庫鏈接(第 1 行的注釋部分) - 如果
mno只是另一個用戶,那么它應該grant select, insert, update在它的表上給用戶xyz;否則,該操作將不起作用
合并還意味著您不必單獨檢查該行是否存在于另一個表中。
外殼腳本?為什么?將所有內容保存在資料庫中。
“守望”可以通過
- 創建一個資料庫觸發器,
xyz.table_1以便一旦發生變化,它就會觸發并運行merge - 或者,安排一個作業(使用
dbms_scheduler),該作業將定期(例如,每小時,每天兩次,...)運行merge
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/356302.html
上一篇:遞回列印變數值的Shell腳本
