我需要將相當數量的物化視圖更改爲Oracle 11g上的常見視圖。 我的第一種方法:ORACLE - 從物化視圖創建視圖
1)獲取的DDL
select dbms_metadata.get_ddl(replace(object_type, ' ', '_'), object_name, owner)
from all_objects
where owner = 'MY_SCHEMA'
and object_type = 'MATERIALIZED VIEW'
and object_name in (
'MAT_VIEW1'
,'MAT_VIEW2'
,'MAT_VIEW3'
,'MAT_VIEW4'
-- ..
,'MAT_VIEW100'
);
每一行包含的DDL相應MVIEW,FE:
CREATE MATERIALIZED VIEW "MY_SCHEMA"."MVIEW1" ("ROW1", "ROW2", "ROW3")
ORGANIZATION HEAP PCTFREE 0 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS NOLOGGING
STORAGE(INITIAL 163840 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MY_TABSPACE"
BUILD IMMEDIATE
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "MY_TABLESPACE"
REFRESH FORCE ON DEMAND
WITH PRIMARY KEY USING DEFAULT LOCAL ROLLBACK SEGMENT
USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
AS SELECT ROWA AS ROW1,
ROWB AS ROW2,
ROWC AS ROW3
FROM MY_SCHEMA.TABLE1
2)擺脫額外的技術的通過使用正則表達式進行配置。爲了方便起見,我使用RegexBuddy並複製粘貼文本。 Oracle不支持看進/快退功能,如FAS,因爲我注意到:
(?=ORGANIZATION\sHEAP).+?(QUERY\sREWRITE)
結果:
CREATE MATERIALIZED VIEW "MY_SCHEMA"."MVIEW1" ("ROW1", "ROW2", "ROW3")
AS SELECT ROWA AS ROW1,
ROWB AS ROW2,
ROWC AS ROW3
FROM MY_SCHEMA.TABLE1
最後我刪除「實現」從每個DDL,現在我有有效的DDL爲意見。
同時,我有一個想法spontanious,只是試圖
create view usual_view1 as
select * from mat_view1;
嗯,那工作爲好,用相當少的努力。
所以我的問題:在創建視圖時,是否有任何區別,通過與通常的DDL創建方式比較,從物化的視圖的定義創建視圖?
「你的觀點是顯示你在物化視圖中保存的數據。「因爲它是:CREATE VIEW」MY_SCHEMA「。」MVIEW1「(」ROW1「,」ROW2「,」ROW3「)AS SELECT ROWA AS ROW1,ROWB AS ROW2,ROWC AS ROW3 FROM MY_SCHEMA.TABLE1 它引用而不是MVIEW?! – royskatt
@royskatt - 我指的是您的'較少努力'方法;更新以使其更清晰。是的,第一種方法是針對底層數據;但第二種方法是針對(過時的)mview –
知道了!非常感謝您的澄清! – royskatt