#navi(ORACLE)
*マテリアライズド・ビュー (MATERIALIZED VIEW) [#aaeec296]

昔でいうところのスナップショット。

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

 create materialized view materialized_view_name
 refresh complete on demand
 as
 select 
   FieldA as OtherTableFieldA,
   FieldB as OtherTableFieldB,
   FieldC as OtherTableFieldC
 from OtherTable@ServiceName;

完全リフレッシュ
 execute dbms_mview.refresh('materialized_view_name','c');

高速リフレッシュ
 execute dbms_mview.refresh('materialized_view_name','f');

**前回リフレッシュ日時を取得する。 [#o8223e17]
 alter session set nls_date_format = 'YYYYMMDD HH24:MI:SS';
 select mview_name, last_refresh_date from user_mviews;

**前回のリフレッシュが高速リフレッシュか確認する。 [#y8a4ebba]
 select mview_name, LAST_REFRESH_TYPE from user_mviews;
FAST なら OK!
|LAST_REFRESH_TYPE|意味|h
|~COMPLETE|最新のリフレッシュが完了した。|
|~FAST|最新のリフレッシュは高速(増分)だった。|
|~NA|マテリアライズド・ビューは、まだリフレッシュされていない(たとえば、DEFERREDで作成された場合)。|

**ORA-01723: zero-length columns are not allowed エラー [#i37c1b28]

もとのテーブルになく、MView に必要なフィールドに NULL を指定すると発生する。

固定文字列や、数値などを指定しエラーを回避する。


(データの型がわからないのだから当然と言えば当然。ただ「データの型が不明です。」というようなもう少しわかりやすいメッセージにしてほしいものだ。)

悪い例
 create materialized view materialized_view_name
 refresh complete on demand
 as
 select 
   FieldA as OtherTableFieldA,
   FieldB as OtherTableFieldB,
   NULL as OtherTableFieldC
 from OtherTable@ServiceName;
 
修正例
 create materialized view materialized_view_name
 refresh complete on demand
 as
 select 
   FieldA as OtherTableFieldA,
   FieldB as OtherTableFieldB,
   ' ' as OtherTableFieldC
 from OtherTable@ServiceName;

#vote(参考になった[8],参考にならなかった[2])
#vote(参考になった[9],参考にならなかった[2])

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS