2013-02-10 82 views

回答

2

你不能改變一個物化視圖的查詢,你必須刪除並重新創建它。

參見:http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_2001.htm

使用ALTER MATERIALIZED VIEW語句來修改現有 物化在一個或多個以下方面的觀點:

  • 改變其存儲特性

  • 更改刷新方法,模式或時間

  • 以改變其結構,使得它是一種不同類型的物化 視圖

  • 要啓用或禁用查詢重寫

+0

因此,我需要獲得用於該MVIEW的確切DDL並刪除舊的並重新創建它?對嗎?因此舊MVIEW中已有的數據也將被丟棄? – Rradhak 2013-02-11 03:32:56

+1

我很確定這就是我所說的。我不確定你認爲分貝可以做什麼 - 如果你改變了查詢,數據不再是正確的。 – 2013-02-11 03:46:18

+0

是的,我同意。如果我放棄它。我可以用相同的名稱重新創建它。我需要相同的名稱,否則我必須重命名舊名稱。 – Rradhak 2013-02-11 04:23:49

0

正如Jeffre肯普指出的,不能更改查詢的現有的物化視圖。

但是,如果您期望的變化將在未來有必要,就可以選擇這些方法之一:

  • 使用中間VIEW做所有繁重;你的MATERIALIZED VIEW然後做了一個簡單的SELECT * FROM myView。這允許您更改查詢 - 但是,它不允許您向物化視圖添加/刪除列或使用物化視圖的預構建表來添加/刪除列;這在邏輯上將用於保存用於更新內容的查詢的內容的TABLE分開。現在,您可以刪除MATERIALIZED VIEW,根據需要添加/刪除TABLE中的列,然後重新創建MATERIALIZED VIEW,
  • 使用查詢MATERIALIZED VIEW的所有代碼的同義詞;如果有必要,使用CTAS創建一個備份表,將同義詞指向該備份表,刪除並重新創建您的MATERIALIZED VIEW,將同義詞指向MATERIALIZED VIEW,然後放下備份表(這就是我們的做法)