簡體   English   中英

如何在Oracle 11g中使用觸發器自動刷新視圖?

[英]How to automaticly refresh a view with a trigger in Oracle 11g?

我有桌子

STORE (ID, NAME, CITY_ID)` and a table `CITY (ID, NAME)`

和一個視圖

CITY_STORE (CITY_ID, CITY_NAME, COUNT_STORES)

我創建了一個視圖V_CITY_STORE ,其中有一列顯示了特定城市的商店數量COUNT_STORES (COUNT(STORE.ID))

CREATE OR REPLACE VIEW V_CITY_STORE AS
SELECT C.ID CITY_ID, C.NAME CITY_NAME, COUNT(S.ID) COUNT_STORES 
FROM CITY C
LEFT JOIN STORE S ON S.CITY = C.ID
GROUP BY C.ID, C.NAME;

我想創建一個觸發器,當某些商店被更新,刪除或插入新商店時,它將自動更新每個城市的商店數量。

我試圖創建一個刷新視圖的觸發器:

CREATE OR REPLACE TRIGGER T_CITY_STORE
AFTER INSERT OR UPDATE OR DELETE ON STORE
BEGIN
REPLACE VIEW V_CITY_STORE AS
SELECT C.ID CITY_ID, C.NAME CITY_NAME, COUNT(S.ID) COUNT_STORES 
FROM CITY C
LEFT JOIN STORE S ON S.CITY = C.ID
GROUP BY C.ID, C.NAME;
END;

但這會給我返回一個錯誤-我想我無法在觸發器內看到視圖。 我對觸發器和程序還很陌生,我只學習了兩天。

我怎樣才能做到這一點?

如果商店很少更新,刪除或插入,那么按照您說的去做可能是可以接受的。 在這種情況下,after語句觸發器主體中的自主事務可能是可以接受的,並將允許您重新實現視圖。

但是,如果對此類事件的罕見程度有疑問,或者您不想創建一個脆弱的系統(肯定會如此),那么我建議您去項目發起人並商討兩次之間的時間間隔。刷新實例化視圖。 在這種情況下,您將創建一個執行該任務的dbms_scheduler作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM