Oracle Job Scheduler创建程序以创建/删除实体视图



我正在尝试实施一个程序,该程序将调用运行以下代码块的Oracle作业调度程序:

create materialized view foo  
parallel  
nologging  
never refresh  
as  
select * from long_running_query;

随后

drop materialized view foo;

现在我正在查看的逻辑流如下:

1)Oracle Scheduler每三十(30)分钟发射一次。
2)使用任意名称(bar)生成新的实现视图
3)bar如上所述(创建垫视图栏...)
传递到创建函数中4)视图(常规未实现的)外部删除
5)重新创建外部_view以指向步骤3中创建的实现视图

我的问题是我无法在PL/SQL或可执行文件中运行。

定期使用动态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;

应该可以使用普通的刷新路径,如下:

create materialized view foo
parallel
nologging
refresh complete
as  
select /*+ append */ * from long_running_query;

然后需要刷新时:

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

最新更新