【SQL】ビュー

f:id:vist764:20200811004735p:plain:w300

ビュー

SELECT文を保持して、開いた際にSELECT文が実行されるイメージ。
データは元のテーブルと連動して自動的に最新の状態に更新される。
列に別名を付けることができる。

--作成
CREATE VIEW ビュー名 AS SELECT文;

--作成(列別名)
CREATE OR REPLACE
VIEW ビュー名 (ビューで使用する列名 , ビューで使用する列名...)
AS SELECT文;

--削除
DROP VIEW ビュー名;

マテリアライズド・ビュー

SELECTの結果の実データを保持している。
リフレッシュ方法とタイミングを指定することができる。

--作成
CREATE MATERIALIZED VIEW ビュー名
AS 
SELECT文;
--作成(指定あり)
CREATE MATERIALIZED VIEW ビュー名
リフレッシュ方法
リフレッシュタイミング
AS 
SELECT文;
リフレッシュ方法

指定しない場合はforceになる。
後からリフレッシュ方法を変えることも出来る。

refresh complete 完全リフレッシュ(全データを再計算し直す。)
refresh fast 高速リフレッシュ(更新のあった箇所だけを再計算する。)
refresh force デフォルト(高速リフレッシュ可能なら高速リフレッシュ、そうでないなら完全リフレッシュを実行する。)
never refresh リフレッシュしない(再計算しない。手動でのリフレッシュ指示も無効。)
--リフレッシュ方法変更
ALTER MATERIALIZED VIEW ビュー名 リフレッシュ方法;
リフレッシュタイミング

指定しない場合はdemandになる。

on commit コミット時
start with・next 一定間隔(指定された時刻に再計算する。)
on demand 手動
--スケジュール更新
CREATE MATERIALIZED ビュー名
REFRESH FAST
START WITH '2020/8/11'  --初回の計算日時
NEXT SYSDATE + 1        --次回以降の計算日時
AS
SELECT文;
--更新スケジュール確認
select last_date,last_sec,next_date,next_sec,interval,what from user_jobs;
--手動更新
--(マテビューで指定された方法(完全 or 高速)でリフレッシュ)
EXEC DBMS_MVIEW.REFRESH('ビュー名')
--完全リフレッシュ指定
EXEC DBMS_MVIEW.REFRESH('ビュー名', 'C')
--高速リフレッシュ指定
EXEC DBMS_MVIEW.REFRESH('ビュー名', 'F')