Oracle的實體化視圖(MVIEW)的深入研究之三

來源:互聯網
上載者:User
Oracle的實體化視圖(MVIEW)的深入研究之三  
  Oracle的實體化視圖(MVIEW)的深入研究之三

作者: AnySQL.net, 轉載時請務必以超連結形式標明文章原始出處和作者資訊.
連結: http://www.anysql.net/oracle/star_in_mview.html

 

在Oracle中建立視圖時, 如果我們用了"*"符號, 會被自動地根據當時表的定義擴充成欄位列表, 在後面再加列時, 新的列不會自動出現在視圖的定義中, 直到你重建視圖為止. 那麼在MVIEW中呢, 通過一個不經意的操作, 發現一個有趣的問題. 總之, 不要隨便地在實體視圖的定義中使用"*"號.

    下面我們在一個表上建兩個實體化視圖, 角本如下:

CREATE TABLE T_MVTEST AS SELECT * FROM TAB;
CREATE MATERIALIZED VIEW LOG ON T_MVTEST
    WITH ROWID,SEQUENCE;
CREATE MATERIALIZED VIEW MV_TEST_STAR
    REFRESH FAST WITH ROWID
AS SELECT ROWID RID, A.* FROM T_MVTEST A;
CREATE MATERIALIZED VIEW MV_TEST_NOSTAR
    REFRESH FAST WITH ROWID
AS SELECT ROWID RID, A.TNAME, A.TABTYPE,
   A.CLUSTERID FROM T_MVTEST A;

    接下來對錶作一個增加列的操作.

SQL> ALTER TABLE T_MVTEST ADD COL4 VARCHAR2(20);

Table altered.

    接下來來完全重新整理兩上實體化視圖, 看看運行情況:

SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_STAR', 'COMPLETE');
BEGIN DBMS_MVIEW.REFRESH('MV_TEST_STAR', 'COMPLETE'); END;

*
ERROR at line 1:
ORA-12018: following error encountered during code generation for
"ANYSQL"."MV_TEST_STAR"
ORA-00904: "COL4": invalid identifier
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2255
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2461
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2430
ORA-06512: at line 1

SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_NOSTAR', 'COMPLETE');

PL/SQL procedure successfully completed.

    這是因為在進行全部方式的重新整理時, 實體化視圖的定義根據當前表的定義被展開了, 將會要重新整理新增的"COL4"這個列, 而在表"MV_TEST_STAR"中現在沒有這個例, 所以重新整理失敗, 解決的方法呢是在, 這個視圖中手工加一個列:

SQL> ALTER TABLE MV_TEST_STAR ADD COL4 NUMBER;

Table altered.

SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_STAR', 'COMPLETE');

PL/SQL procedure successfully completed.

    可以這樣解決結果還算好了. 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.