[英]Create a stored procedure that runs a SELECT statement to keep an Oracle table updated
為了優化.NET應用程序,我在Oracle數據庫上創建了一個自定義表,以避免每次應用程序查詢數據庫時都進行昂貴的JOIN。 下面的SQL最初用於填充此自定義表。 由於用於填充定制表的表在不斷變化,因此我需要確保定制表保持最新狀態。 我相信我需要創建一個以預定頻率運行的存儲過程,該存儲過程將執行以下操作:a)刪除SELECT返回的記錄集中不再存在的所有記錄b)附加由SELECT返回的記錄集中存在的任何記錄SELECT但在QL_ASSETS表中不存在,並且c)更新QL_ASSETS表和SELECT返回的記錄集中不同的記錄中的任何數據。 一個簡單的UPDATE查詢是否可以做到這一點,還是僅更新QL_ASSETS表和SELECT返回的記錄集中不同的記錄中的數據? 如果是后者,那么關於我如何完成所有3個任務的任何建議? 謝謝!
INSERT INTO QL_ASSETS (
THIRD_PARTY_SERVICE_CLEAN,
LOCATION_ACCOUNT_ID,
LOCATION_ACCOUNT_NUMBER,
PLI_NAME,
PLI,
STREET,
CITY,
STATE,
ZIPCODE,
COUNTRY,
ULTIMATE_PARENT_ID,
PARENT_ID,
LOCATION_STREET,
LOCATION_CITY,
LOCATION_STATE,
LOCATION_ZIPCODE,
LOCATION_COUNTRY,
ULTIMATE_PARENT_ACCOUNT_NUMBER)
(SELECT
B.THIRD_PARTY_SERVICE_CLEAN,
A.LOCATION_ACCOUNT_ID,
D.ACCOUNT_NUMBER AS LOCATION_ACCOUNT_NUMBER,
F.NAME AS PLI_NAME,
A.PLI,
H.STREET,
H.CITY,
H.STATE,
H.ZIPCODE,
H.COUNTRY,
D.ULTIMATE_PARENT_ID,
D.PARENT_ID,
G.STREET AS LOCATION_STREET,
G.CITY AS LOCATION_CITY,
G.STATE AS LOCATION_STATE,
G.ZIPCODE AS LOCATION_ZIPCODE,
G.COUNTRY AS LOCATION_COUNTRY,
E.ACCOUNT_NUMBER AS ULTIMATE_PARENT_ACCOUNT_NUMBER
FROM ASSET_PLUS A,
QUARTERLY_LETTER_LOAD B,
DATASTORE_PLI_MAPPING C,
ACCOUNT D,
ACCOUNT E,
PROD_INT F,
ADDRESS G,
ADDRESS H
WHERE B.THIRD_PARTY_SERVICE_CLEAN = C.DATASTORE_SVC_NAME
AND C.PLI = A.PLI
AND A.PRODUCT_ID = F.ROW_ID
AND E.PRIMARY_ADDRESS_ID = H.ADDRESS_ID
AND D.PRIMARY_ADDRESS_ID = G.ADDRESS_ID
AND D.ULTIMATE_PARENT_ID = E.ACCOUNT_ID
AND D.ACCOUNT_ID = A.LOCATION_ACCOUNT_ID
下面的materialised view
在創建后立即可用,並將根據您提到的時間范圍每天更新(從... START WITH
)。
您也可以手動刷新
EXEC DBMS_REFRESH.REFRESH(name => 'YOUR_MAT_VIEW');
以及MV的DDL:
CREATE MATERIALIZED VIEW YOUR_MAT_VIEW
BUILD IMMEDIATE
REFRESH COMPLETE
START WITH TRUNC(SYSDATE)--(+?/24) ?- HOUR OF DAY
NEXT TRUNC(SYSDATE)+1--(+?/24)
SELECT
B.THIRD_PARTY_SERVICE_CLEAN,
A.LOCATION_ACCOUNT_ID,
D.ACCOUNT_NUMBER AS LOCATION_ACCOUNT_NUMBER,
F.NAME AS PLI_NAME,
A.PLI,
H.STREET,
H.CITY,
H.STATE,
H.ZIPCODE,
H.COUNTRY,
D.ULTIMATE_PARENT_ID,
D.PARENT_ID,
G.STREET AS LOCATION_STREET,
G.CITY AS LOCATION_CITY,
G.STATE AS LOCATION_STATE,
G.ZIPCODE AS LOCATION_ZIPCODE,
G.COUNTRY AS LOCATION_COUNTRY,
E.ACCOUNT_NUMBER AS ULTIMATE_PARENT_ACCOUNT_NUMBER
FROM ASSET_PLUS A,
QUARTERLY_LETTER_LOAD B,
DATASTORE_PLI_MAPPING C,
ACCOUNT D,
ACCOUNT E,
PROD_INT F,
ADDRESS G,
ADDRESS H
WHERE B.THIRD_PARTY_SERVICE_CLEAN = C.DATASTORE_SVC_NAME
AND C.PLI = A.PLI
AND A.PRODUCT_ID = F.ROW_ID
AND E.PRIMARY_ADDRESS_ID = H.ADDRESS_ID
AND D.PRIMARY_ADDRESS_ID = G.ADDRESS_ID
AND D.ULTIMATE_PARENT_ID = E.ACCOUNT_ID
AND D.ACCOUNT_ID = A.LOCATION_ACCOUNT_ID;
您可以像普通的簡單表格一樣,從YOUR_MAT_VIEW中進一步查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.