DBエンジニアの備忘ブログ

Oracleを扱っています。自身の備忘として記事を書いていこうかなと思っています。

【Oracle】マテリアライズドビューの作成方法【超簡単サンプル】

はじめに

マテリアライズドビュー(以下マテビュー)の作成方法について、一連の流れがまとまってる記事が少ないなと思ったのでまとめておきます。

作成手順

  1. テーブル作成(マスタ表)
  2. マテビューログ作成
  3. マテビュー作成

※マスタ表とは、マテビューの元表のことです。

テーブル作成(マスタ表)

マテビューを作成するには、マスタ表との紐づけを行うために主キーが必要なので、ここで主キーも作って設定しておきます。
※POWIDで紐づけすることもできますが、ここでは割愛します。

SQL> create table test1 (col number(20));  

表が作成されました。  

SQL> insert into test1 values (1);  

1行が作成されました。  

SQL> commit;  

コミットが完了しました。  

SQL> select * from test1;  

       COL  
----------  
         1  

主キーをつけます。

SQL> alter table test1 add constraint pk_test1 primary key(col);

表が変更されました。

マテビューログ作成

マテビューログは、マスタ表の更新履歴を残していくものなので、マテビューを作成する前に、作成しておく必要があります。

SQL> create materialized view log on test1;

マテリアライズド・ビュー・ログが作成されました。

マテビュー作成

後は、マテビューを作成するだけです。今回はマスタ表(test1)をすべてselectするものとしています。

SQL> create materialized view mview1 as select * from test1;

マテリアライズド・ビューが作成されました。

SQL> select * from mview1;

       COL
----------
         1

おまけ①

マスタ表を更新後、リフレッシュしてマテビューも更新してみました。

SQL> insert into test1 values(2);

1行が作成されました。

SQL> commit;

コミットが完了しました。

SQL> select * from test1;

       COL
----------
         1
         2

SQL> select * from mview1;

       COL
----------
         1

マスタ表だけ更新された状態なので、リフレッシュすることで、マテビューも更新します。

SQL> exec dbms_mview.refresh('MVIEW1','C');

PL/SQLプロシージャが正常に完了しました。

SQL> select * from mview1;

       COL
----------
         1
         2

マスタ表とマテビューの更新もOK!

おまけ②

マスタ表に主キーがないと、マテビューログの作成でエラーになります。

SQL> create table test2 (col number(20));

表が作成されました。

SQL> create materialized view log on test2;
create materialized view log on test2
*
行1でエラーが発生しました。:
ORA-12014: 表'TEST2'に主キー制約がありません

最後までお付き合いいただきありがとうございました!