RM-BLOG

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

【ORACLE】マテビューの元になるオブジェクト情報

マテビューのもとになるオブジェクト情報が「USER_MVIEW_DETAIL_RELATIONS」というシステム表?で見れる
例えばマテビューAの元オブジェクト情報が見たいときは
select DETAILOBJ_NAME,DETAILOBJ_TYPE from USER_MVIEW_DETAIL_RELATIONS WHERE MVIEW_NAME = 'A'
という感じ。結果として↓のように返ってくる。
DETAILOBJ_NAMEDETAILOBJ_TYPE
BTABLE
つまりマテビューAはテーブルBから作られていますよ、ということがわかる。

ただし経験則的には以下の点に課題がある。
1.複数テーブルから作成されているマテビューの場合は、レコードは返ってくるがDETAILOBJ_NAMEがNULLになる。
2.「マテビューのマテビュー」の場合はDETAILOBJ_TYPEが「TABLE」の行と「MATERIALIZED VIEW」の行が2行返ってくる
2.はともかく1.が結構厄介である。
明細のようにして全部返してくれりゃいうことないんだが。
まあ副問い合わせとかFunctionとか使ってゴチャゴチャしてるマテビューもあるだろうし、
判断するのも難しいそうだから仕方ない。

上記のような課題もあるので、比較的簡単・単純な構造のマテビューじゃない限り、
「USER_MVIEW_DETAIL_RELATIONS」を見ただけでは元オブジェクトの情報は判断できない。
厳密にはUSER_MVIEWS.QUERYを見るのが確実ということだろう。

ちょっとした情報を得るためだけならこれでも十分なので、そのメモとして残す。