写的过程如下:
create or replace procedure createAview is
sql_str varchar(500);
view_name varchar(100);
begin
  select user into view_name from dual; 
  sql_str:='create view '||view_name||' as (select id from cxb24data)';
  execute immediate sql_str;
end createAview;
然后,如下出现权限不够的提示:
SQL> execute createAview();
 
begin createAview(); end;
 
ORA-01031: insufficient privileges
ORA-06512: at "SYSTEM.CREATEAVIEW", line 7
ORA-06512: at line 2
 
SQL> 我想通过上面的一个过程,创建一个和当前登录用户名相同的视图,好进行某些操作,但不成功,这是为什么?我直接打入create view ...能创建成功,为什么放在过程中,动态生成就不行,有解决办法吗?急急

解决方案 »

  1.   

    楼上英明,
    pl/sql和普通sql中的权限是有区别的即使是DBA也需要明确的grant语句
      

  2.   

    谢谢,但问题又来了:
    类似地我view_name='aitk'的情况下:ORA-00904: "AITK": invalid identifier
    ORA-06512: at "SYSTEM.ADD_NEW_USER", line 18
    ORA-06512: at line 2建视图的时候说的,这又是怎么回事呢?
      

  3.   

    SYSTEM.ADD_NEW_USER
    楼主确定这是创建View的时候发生的错误吗?
    这不是说在创建用户的时候发生了错误吗?
    上面报的是第18行错误,但是搂住只提供了8行代码地说!
      

  4.   

    可能是你的create view 包含在某个角色(比如dba)中,被角色授权,间接的授过去了,此时直接可以create view,但是在pl/sql 块中,被授予的角色相当于失效的,因此报错没有权限。只要直接授权就可以解决。grant  create view  to  user;
      

  5.   

    后来的那个问题原来是在建表时要注意一些格式,比如,where id='''||id_name||'''';
    这些单引号要算清楚,另外我后来查找当前用户时select username  into XXXX from dual,那个XXXX是大写,在进行一一些字符串比较时要记得转化,特此总结,谢谢大家,这些天学了很多