Могу ли я получить материализованное представление в реальном времени на основе быстрого refre sh, если мои материализованные журналы создаются на базовых таблицах представления? - PullRequest
0 голосов
/ 29 января 2020

Я хотел создать материализованное представление в реальном времени с быстрой ежедневной ссылкой sh на основе запроса, который взял поля из 3 таблиц (PS_JOB, PS_DEPT_TBL, PSOPRDEFN) и 1 представления (PS_NPS_LICCERT_VW). Запрос / процесс выглядит примерно так.


CREATE MATERIALIZED VIEW LOG ON PS_JOB;

CREATE MATERIALIZED VIEW LOG ON PS_NPS_LICCERT_VW

CREATE MATERIALIZED VIEW LOG ON PSOPRDEFN

CREATE MATERIALIZED VIEW LOG ON PS_DEPT_TBL


CREATE MATERIALIZED VIEW ALL_EMP_CERTS
BUILD IMMEDIATE
REFRESH FAST
START WITH to_date   ('28-JAN-20','DD-MON-RR') --start on this date
NEXT sysdate +1               --next refresh every 1 days 
 AS 
 SELECT DISTINCT(A.EMPLID),E.OPRID,E.OPRDEFNDESC,B.JPM_DESCR90,B.JPM_DATE_3,B.JPM_DATE_6,H.DESCR,H.LOCATION FROM PS_JOB@PEOPLESOFT A
LEFT OUTER JOIN PS_NPS_LICCERT_VW@PEOPLESOFT B ON A.EMPLID=B.EMPLID 
LEFT OUTER JOIN PSOPRDEFN@PEOPLESOFT E ON A.EMPLID=E.EMPLID
LEFT OUTER JOIN PS_DEPT_TBL@PEOPLESOFT H ON A.DEPTID=H.DEPTID
  WHERE  a.EFFDT = (SELECT MAX(e.EFFDT) FROM PS_JOB@PEOPLESOFT e
        WHERE E.EFFDT <= sysdate
        and e.emplid = a.emplid
        and e.empl_rcd = A.EMPL_RCD)
        AND a.EFFseq = (SELECT MAX(f.EFFseq) FROM PS_JOB@PEOPLESOFT f
        WHERE f.EFFDT = a.effdt
        and f.emplid = a.emplid
        and f.empl_rcd = A.EMPL_RCD)
        AND A.PER_ORG = 'EMP'
        AND a.paygroup not in ('SUM','CWR')
        AND A.EMPL_STATUS in ('A', 'L', 'P', 'S');

Однако я не могу создать материализованный журнал PS_NPS_LICCERT_VW с момента его просмотра, и при попытке


CREATE MATERIALIZED VIEW LOG ON PS_NPS_LICCERT_VW
Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action

* я получаю следующую ошибку 1006 * Я надеялся спросить, есть ли другой способ создать быстрое материализованное представление, основанное на тех же исходных таблицах / представлениях. Могу ли я создать материализованные журналы на базовых таблицах представления, т.е. PS_NPS_LICCERT_VW, которые в этом случае будут включать таблицы PS_JPM_PROFILE, PS_JPM_JP_ITEMS, PS_JPM_CAT_TYPES и PS_JPM_CAT_ITEMS, а затем создать снимок с быстрой записью на основе этих таблиц с быстрой ссылкой, которая будет sh любые изменения. Если я попытаюсь это сделать, мои запросы будут выглядеть следующим образом:
--Creating the materialized logs for PS_NPS_LICCERT_VW base tables
CREATE MATERIALIZED VIEW LOG ON PS_JPM_PROFILE ; 
CREATE MATERIALIZED VIEW LOG ON PS_JPM_JP_ITEMS ; 
CREATE MATERIALIZED VIEW LOG ON PS_JPM_CAT_TYPES ;
CREATE MATERIALIZED VIEW LOG ON PS_JPM_CAT_ITEMS ;

--Creating materialized views on the other 3 original tables

CREATE MATERIALIZED VIEW LOG ON PS_JOB;

CREATE MATERIALIZED VIEW LOG ON PS_PSOPRDEFN;

CREATE MATERIALIZED VIEW LOG ON PS_DEPT_TBL;

--- Creating my materialized view
CREATE MATERIALIZED VIEW ALL_EMP_CERTS
BUILD IMMEDIATE
REFRESH FAST
START WITH to_date   ('28-JAN-20','DD-MON-RR') --start on this date
NEXT sysdate +1               --next refresh every 1 days 
 AS 
 SELECT DISTINCT(A.EMPLID),E.OPRID,E.OPRDEFNDESC,B.JPM_DESCR90,B.JPM_DATE_3,B.JPM_DATE_6,H.DESCR,H.LOCATION FROM PS_JOB@PEOPLESOFT A
LEFT OUTER JOIN PS_NPS_LICCERT_VW@PEOPLESOFT B ON A.EMPLID=B.EMPLID 
LEFT OUTER JOIN PSOPRDEFN@PEOPLESOFT E ON A.EMPLID=E.EMPLID
LEFT OUTER JOIN PS_DEPT_TBL@PEOPLESOFT H ON A.DEPTID=H.DEPTID
  WHERE  a.EFFDT = (SELECT MAX(e.EFFDT) FROM PS_JOB@PEOPLESOFT e
        WHERE E.EFFDT <= sysdate
        and e.emplid = a.emplid
        and e.empl_rcd = A.EMPL_RCD)
        AND a.EFFseq = (SELECT MAX(f.EFFseq) FROM PS_JOB@PEOPLESOFT f
        WHERE f.EFFDT = a.effdt
        and f.emplid = a.emplid
        and f.empl_rcd = A.EMPL_RCD)
        AND A.PER_ORG = 'EMP'
        AND a.paygroup not in ('SUM','CWR')
        AND A.EMPL_STATUS in ('A', 'L', 'P', 'S');


ИЛИ В таком случае мне придется полагаться на ПОЛНУЮ ОТКАЗ SH ПО ЗАПРОСУ? В таком случае следующий запрос будет достаточно хорош, чтобы ежедневно обновлять sh



create materialized view ALL_EMP_CERTS_Refresh_Daily
refresh on demand 
start with sysdate next sysdate + 1
as SELECT DISTINCT(A.EMPLID),E.OPRID,E.OPRDEFNDESC,B.JPM_DESCR90,B.JPM_DATE_3,B.JPM_DATE_6,H.DESCR,H.LOCATION FROM PS_JOB@PEOPLESOFT A
LEFT OUTER JOIN PS_NPS_LICCERT_VW@PEOPLESOFT B ON A.EMPLID=B.EMPLID 
LEFT OUTER JOIN PSOPRDEFN@PEOPLESOFT E ON A.EMPLID=E.EMPLID
LEFT OUTER JOIN PS_DEPT_TBL@PEOPLESOFT H ON A.DEPTID=H.DEPTID
  WHERE  a.EFFDT = (SELECT MAX(e.EFFDT) FROM PS_JOB@PEOPLESOFT e
        WHERE E.EFFDT <= sysdate
        and e.emplid = a.emplid
        and e.empl_rcd = A.EMPL_RCD)
        AND a.EFFseq = (SELECT MAX(f.EFFseq) FROM PS_JOB@PEOPLESOFT f
        WHERE f.EFFDT = a.effdt
        and f.emplid = a.emplid
        and f.empl_rcd = A.EMPL_RCD)
        AND A.PER_ORG = 'EMP'
        AND a.paygroup not in ('SUM','CWR')
        AND A.EMPL_STATUS in ('A', 'L', 'P', 'S');




Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...