kinjouj.github.io

Oracle Materialized View

2010-01-24T00:00:00+09:00 Database Oracle

一般のビューとは違い、実体そのものを持つビューの事らしい...。とりあえず調べた結果をメモ

テーブルを作成

CREATE TABLE SAMPLE_TBL(
    ID NUMBER(10),
    NAME VARCHAR2(100),
    AGE NUMBER(8)
);

権限を付加する

GRANT CREATE MATERIALIZED VIEW TO hoge;

マテリアライズド・ビューログを作成

CREATE MATERIALIZED VIEW LOG ON SAMPLE_TBL
    WITH
        ROWID,
        sequence(ID,NAME,AGE)
        INCLUDING NEW VALUES;

ビューを作成する

CREATE MATERIALIZED VIEW SAMPLE_MV
    REFRESH FAST ON COMMIT AS
        SELECT
            ID,NAME,AGE
        FROM
            SAMPLE_TBL
        WHERE
            AGE < 20;

テーブルが更新されてもマテリアライズド・ビューには反映されないので、リフレッシュする際には

execute dbms_mview.refresh("SAMPLE_MV","f")

を実行する。dbms_mviewプロシージャのrefreshメソッドの第二パラメータはcの場合は完全リフレッシュ、fの場合は高速リフレッシュが行われる。最後にテーブルがSELECTされる際に自動的にビュー側が参照されるようにできる機能「Query Rewrite」を有効にするには

ALTER MATERIALIZED VIEW Mview_l_s_n ENABLE QUERY REWRITE;