Я хотел создать материализованное представление в реальном времени с быстрой ежедневной ссылкой 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
CREATE MATERIALIZED VIEW LOG ON PS_JPM_PROFILE@PEOPLESOFT WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON PS_JPM_JP_ITEMS@PEOPLESOFT WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON PS_JPM_CAT_TYPES@PEOPLESOFT WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON PS_JPM_CAT_ITEMS@PEOPLESOFT WITH ROWID;
Затем я отбросил свое материализованное представление и создал его снова.
CREATE MATERIALIZED VIEW ALL_EMP_CERTS_TEST
BUILD IMMEDIATE
REFRESH FAST START WITH (SYSDATE) NEXT (TRUNC(SYSDATE) + 1) + 4 / 24 WITH ROWID
DISABLE QUERY REWRITE
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 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 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');
И я получил следующая ошибка:
Error report -
ORA-12015: cannot create a fast refresh materialized view from a complex query
12015. 00000 - "cannot create a fast refresh materialized view from a complex query"
*Cause: Neither ROWIDs and nor primary key constraints are supported for
complex queries.
*Action: Reissue the command with the REFRESH FORCE or REFRESH COMPLETE
option or create a simple materialized view.
Любые предложения о том, как обойти это.