我正在尝试实现一个程序来调用运行以下代码块的Oracle作业调度程序:
create materialized view foo
parallel
nologging
never refresh
as
select * from long_running_query;
随后
drop materialized view foo;
现在我正在查看的逻辑流程如下:
1)Oracle Scheduler每三十(30)分钟触发一次
2)使用任意名称(条形)生成新的物化视图
3)Bar如上所述传递给create函数(创建mat视图栏......)
4)视图(常规未实现)outside_view被删除
5)重新创建outside_view以指向在步骤3中创建的物化视图
我的问题是我无法在PL / SQL或可执行文件中运行它。
答案 0 :(得分:1)
经常使用动态SQL的过程应该有效:
CREATE OR REPLACE PROCEDURE refresh_mv(p_mv_name VARCHAR2) AS
BEGIN
EXECUTE IMMEDIATE '
CREATE MATERIALIZED VIEW ' || dbms_assert.simple_sql_name(p_mv_name) || '
PARALLEL
NOLOGGING
NEVER REFRESH
AS
SELECT * FROM <biq_query>';
EXECUTE IMMEDIATE
'CREATE OR REPLACE VIEW outside_view AS SELECT * FROM '||p_mv_name;
-- DROP old mv?
END;
答案 1 :(得分:0)
应该可以使用普通的刷新路径,如下所示:
create materialized view foo
parallel
nologging
refresh complete
as
select /*+ append */ * from long_running_query;
然后需要刷新时: