#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])