【发布时间】:2014-04-25 20:50:43
【问题描述】:
我需要将大量物化视图更改为 Oracle 11g 上的常规视图。 我的第一种方法:
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'
);
每一行都包含相应 MVIEW 的 DDL,f.e.:
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 并不像我注意到的那样支持向前/向后功能:
(?=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 中删除了“MATERIALIZED”,现在我有了视图的有效 DDL。
同时我有一个自发的想法并尝试了
create view usual_view1 as
select * from mat_view1;
嗯,效果也不错,省力了很多。
所以我的问题是:与通过 DDL 创建它的通常方式相比,从 物化 视图的定义创建视图时,最终有什么不同吗?
【问题讨论】:
标签: regex oracle view ddl materialized-views