- 追加された行はこの色です。
- 削除された行はこの色です。
#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(参考になった[3],参考にならなかった[0])
#vote(参考になった[9],参考にならなかった[2])