日期:2014-05-16  浏览次数:20668 次

物化视图等一些问题 。。。望大家指教。。
最近 在做物化视图。。遇到一些问题 不知道如何解决。。。希望在这里可以得到各位大虾的指教 。。 先感谢了 。呵呵


1.在做物化视图时 因为SQL里有很多库 到ORACLE时 要创建很多物化视图过程
SQL code

declare
  sqls varchar(1000);
      cursor tb1 is select t."name" as name from sysdatabases@master t where t."name" like 'USER%' 
      order by t."name";
      begin
      for i in tb1
      loop
          sqls:='CREATE MATERIALIZED VIEW '||i.name||'.test1 nologging '||
               'TABLESPACE USER2009 '||
               'BUILD DEFERRED '||
               'as  select * from test1@'||i.name||
               ' where rownum=rownum ';  
               execute immediate sqls;
          
      end loop;
      end;

create or replace procedure USER2009 as
begin
   declare
       sqls varchar(1000);
            cursor tb1 is select t."name" as name from sysdatabases@master t where t."name" like 'USER%' order by t."name";
            begin
            for i in tb1
            loop     
                sqls:='begin dbms_mview.refresh('''||trim(i.name)||'.test1''); end;';
            execute immediate sqls;
            end loop;
            end;
end;


因为物化视图有近200个 所以用了循环 可是 现在有个问题是 每次创建 我的电脑都会有一个进程产生 一直到电脑卡死为止。。有什么方法可以让它物化视图完毕后 把进程断掉么?

2.同样是上面的代码 执行到一半的时候 会出现一个错误 说提取违反顺序 。。然后断开了。。 请问这是什么原因造成的 如何解决 ?



再次感谢。。期待回答。。~

------解决方案--------------------
1、单步调试一下,确认卡在什么地方。
2、或者直接通过SQL语句生成建立物化视图的脚本(和你存储过程差不多),然后执行脚本,确认问题出现在哪儿。

------解决方案--------------------
查查在哪里卡死,你这样写,很容易挂起;