Oracle作业调度程序创建程序以创建/删除物化视图

时间:2012-10-22 14:39:27

标签: sql oracle plsql scheduled-tasks

我正在尝试实现一个程序来调用运行以下代码块的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或可执行文件中运行它。

2 个答案:

答案 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;

然后需要刷新时:

  1. 禁用foo上的所有索引
  2. 刷新foo
  3. 重建索引,最好是用nologging。