我创建了一些实例视图,但是有些会莫名其妙的失效。于是就写了一个定时程序,每次到all_mviews中去检索失效的实例视图,然后将这些实例视图重建。
主要语句如下:
 procedure rebuild_mv(mv_name varchar2) is
  command varchar2(500);
  interv  varchar2(100);
  begin
    select trim(interval) into interv from all_jobs  where what like '%'||mv_name||'%';
    command:='drop materialized view '||mv_name;
    execute immediate command;
    command:='create materialized view '||mv_name;
    command:=command||' tablespace dbre refresh with rowid ';
    command:=command||' start with sysdate next ';
    command:=command||interv;
    command:=command||' as select * from '||mv_name||'@dbre.world';
    execute immediate command;
  end;
其中mv_name是要重建的实例视图的名字,运行drop视图时没问题。但是到最后一句,创建视图时就会报错“权限不足”。把command的内容在sql窗口中单独运行时就没有问题,就是说当前用户有创建实例视图的权限。为什么会权限不足呢?

解决方案 »

  1.   

    sql>grant create any table to u_user;
      

  2.   

    你SP的OWNER和你在SQL窗口运行COMMAND的用户是同一用户吗?
      

  3.   

    那是不是execute immediate 这种动态SQL执行方式不能运行CREATE MA。。 VIEW?
    你可以用别的动态SQL执行方式试试,不过这个我也没遇到过,不很肯定
      

  4.   

    解决了,给用户加上create any snapshot权限就行了。