Создайте хранимую процедуру, которая запускает ЗЕЬЕСТ, чтобы сохранить таблицу Oracle обновленной

голоса
0

Для того, чтобы оптимизировать .NET приложения я создал пользовательскую таблицу на с БД Oracle, чтобы избежать дорогостоящих JOIN и каждый раз, когда приложение опрашивается БД. Ниже SQL был использован для первоначального заполнения этой пользовательской таблицы. Как таблицы, используемые для заполнения пользовательской таблицы постоянно меняются мне нужно убедиться, что мой настраиваемая таблица хранится в актуальном состоянии. Я считаю, что нужно создать хранимую процедуру, которая работает на заданной частоте, которая будет делать следующее: а) удалить все записи, которые больше не существуют в наборе записей, возвращенного SELECT, б) добавление каких-либо записей, которые существуют в наборе записей, возвращаемых SELECT, но не существует в таблице QL_ASSETS и с) обновлять какие-либо данные в записях, которые существуют как в таблице QL_ASSETS и записях, возвращенных SELECT, которые различаются. Будет ли простой UPDATE запрос выполнить это или же это просто обновить данные в записях, которые существуют как в таблице QL_ASSETS и записях, возвращенных SELECT, которые отличаются? В последнем случае, какие-либо предложения относительно того, как я могу выполнить все 3 задачи? Благодаря!

INSERT IGNORE  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
Задан 01/01/2014 в 17:07
пользователем
На других языках...                            


1 ответов

голоса
1

Ниже materialised viewдоступен сразу же после создания и будет обновляться ежедневно, за временные рамки вы упомянули ( START WITH....).

Вы также можете обновить его вручную , как

EXEC DBMS_REFRESH.REFRESH(name => 'YOUR_MAT_VIEW');

И DDL для MV:

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 вроде как обычный простой таблицы.

Ответил 01/01/2014 в 17:14
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more