- - PR -
UNION ALL を含むマテリアライズド・ビューについて
1
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-09-05 12:00
Oracle 10.2.0.1.0 で、高速リフレッシュのマテリアライズドビューの作成でエラーになります。おそらく高速リフレッシュに関する要件を満たしていないのだと思いますが、どれを満たしていないのか、よくわかりません。
テーブルは以下のように作っています。
マテリアライズド・ビュー・ログは以下のように作っています。
ここで、マテリアライズド・ビューB を以下のように作成しようとします。
このSQLでは以下のエラーになります。
そこで渋々 ON COMMIT を ON DEMAND に変えてみると、今度は以下のエラーになります。
ちなみに UNION ALL をはずして、最初の SELECT のみにするとあっさり成功します。OTN の「UNION ALLを含むマテリアライズド・ビューの高速リフレッシュに関する制限」にも目を通しているのですが、私には特に問題ないように見えます。 要は REFRESH FAST, ON COMMIT 指定のマテリアライズド・ビューを作りたいのですが、原因、解決策のわかる方いらっしゃいましたら、よろしくお願いします。 ※9/8 元のCREATE MATERIALIZED VIEW 文が間違っていたので修正しました。 REFRESH COMPLETE ではなく REFRESH FAST です。 また、ON DEMAND ではなく ON COMMIT です。 失礼しました。 [ メッセージ編集済み 編集者: テッテ 編集日時 2008-09-08 13:10 ] | ||||||||||||||||||||
|
投稿日時: 2008-09-06 01:03
この要件を満たしていないようですが・・・ | ||||||||||||||||||||
|
投稿日時: 2008-09-06 01:33
お返事ありがとうございます。 「すべてのディテール表のROWIDが、マテリアライズド・ビュー問合せ定義のSELECTリストにあること。」は、「結合のみを含むマテリアライズド・ビュー」に REFRESH FAST 指定するための条件として挙げられていますが、このケースは結合は含んでいません。 (そもそも集計してるので ROWID の指定のしようがありませんが…) このケースは「集計を含むマテリアライズド・ビュー」に該当すると認識しています。 | ||||||||||||||||||||
|
投稿日時: 2008-09-06 10:57
大変失礼致しました。上から読んで来て行き過ぎてしまいました。。。
やり直してみます。
と言うことなので、現状だと挿入専用なのかもしれません。 VALUE1,VALUE2に not null制約を追加するか、 COUNT(VALUE1),COUNT(VALUE2)をUNIONのSELECT句にそれぞれ追加すると 挿入専用で無いマテリアライズド・ビューの要件を満たせそうです。 表8-2 集計を含むマテリアライズド・ビューの要件 http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05763-01/basicmv.htm#g1014280 斜め読みしただけなので、また間違っていたらゴメンナサイ。 | ||||||||||||||||||||
|
投稿日時: 2008-09-08 13:12
お返事ありがとうございます。 ご指摘の通りで、COUNT(VALUE1),COUNT(VALUE2) を SELECT 句に追加することで解決しました。ありがとうございました。 |
1