【问题标题】:How to create a materialized view with union(or union all) and joins如何使用联合(或全部联合)和连接创建物化视图
【发布时间】:2019-06-22 14:18:48
【问题描述】:

出于性能需求,我想使用以下脚本在提交刷新选项上创建物化视图:

CREATE TABLE DEVDV 
(DEVDV_ID INTEGER PRIMARY kEY, 
DEVDV_SRC_DVISE_ID INTEGER, 
DEVDV_CIB_DVISE_ID INTEGER);


CREATE TABLE CONDV 
(CONDV_ID INtEgEr PRiMARY KEY, 
CONDV_DEVDV_iD INTEGER, 
CONDV_TX NUMbeR, 
CONDV_DATE_DEB datE, 
CONDV_DATE_FIN DATE);

CREATE MATERIALIZED VIEW LOG ON DEVDV WITH ROWID;

CREATE MATERIALIZED VIEW LOG ON CONDV WITH ROWID;

CREATE MATERIALIZED VIEW MV_DEVDV_TYP_2
REFRESH FAST
ON COMMIT
AS
SELECT DEVDV.ROWID CROWID,
       CONDV.ROWID DROWID,
       DEVDV_ID,
       1 AS MARKER,
       DEVDV_SRC_DVISE_ID,
       DEVDV_CIB_DVISE_ID,
       CONDV_TX, 
       CONDV_DATE_DEB,
       CONDV_DATE_FIN
FROM
    DEVDV INNER JOIN CONDV ON DEVDV_ID = CONDV_DEVDV_ID
UNION ALL
SELECT DEVDV.ROWID CROWID,
       CONDV.ROWID DROW_ID,
       DEVDV_ID,
       2 AS MARKER,
       DEVDV_CIB_DVISE_ID,
       DEVDV_SRC_DVISE_ID,
       1/CONDV_TX, 
       CONDV_DATE_DEB,
       CONDV_DATE_FIN
FROM
    DEVDV INNER JOIN CONDV ON DEVDV_ID = CONDV_DEVDV_ID;

Oracle 表示查询复杂,不满足快速刷新要求,

你能告诉我我违反了哪条规则吗?

【问题讨论】:

    标签: oracle union-all materialized-views


    【解决方案1】:

    我不知道为什么,但是 - 对于 oracle 中的物化视图 - 您必须使用旧语法进行连接。所以把所有的表都放在FROM中,用逗号隔开,连接条件放在where子句中(外连接使用“(+)”)。

    这对我有用:

    CREATE MATERIALIZED VIEW MV_DEVDV_TYP_2
    REFRESH FAST
    ON COMMIT
    AS
    SELECT DEVDV.ROWID CROWID,
           CONDV.ROWID DROWID,
           DEVDV_ID,
           1 AS MARKER,
           DEVDV_SRC_DVISE_ID,
           DEVDV_CIB_DVISE_ID,
           CONDV_TX, 
           CONDV_DATE_DEB,
           CONDV_DATE_FIN
    FROM
        DEVDV, CONDV
    WHERE DEVDV_ID = CONDV_DEVDV_ID
    UNION ALL
    SELECT DEVDV.ROWID CROWID,
           CONDV.ROWID DROW_ID,
           DEVDV_ID,
           2 AS MARKER,
           DEVDV_CIB_DVISE_ID,
           DEVDV_SRC_DVISE_ID,
           1/CONDV_TX, 
           CONDV_DATE_DEB,
           CONDV_DATE_FIN
    FROM
        DEVDV, CONDV 
    WHERE DEVDV_ID = CONDV_DEVDV_ID;
    
    Materialized view MV_DEVDV_TYP_2 created.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-09
      • 2017-09-03
      • 2021-05-04
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      相关资源
      最近更新 更多