你在过程里要用动态sql.......
begin
...
strsql := 'CREATE ROLE ........';
execute immediate strsql;end;

解决方案 »

  1.   

    我就是这样用的
    strsql := 'CREATE ROLE ........';
    execute immediate strsql;
      

  2.   

    能创建角色并不能说明可以创建RULE,它分的很细的,好像在用户管理的地方有设置。
      

  3.   

    CREATE ROLE不就是创建角色吗
      

  4.   

    oracle中有一些经常让人混淆的东西,比如pl/sqll和sql之间的细小差别,楼主的问题就是其中之一。
    问题产生的原因是直接使用sql语句,可以使用通过role间接授权的权限,比如赋予某个用户dba role之后在sql语句中就能使用所有dba role所拥有的权限,这种授权方式是间接的,被称为隐式授权。而在pl/sql中不能使用通过role所获得的权限,而必须使用grant 某个权限 to user的办法直接给用户授权,这叫做显式授权。
    所以你要做的就是执行:
    grant create role to myuser;然后就能够执行你的过程了。
      

  5.   

    此用户没有“create role”的权限,过程里用户DDL语句执行的权限是要进行显式授权的。
      

  6.   

    谢谢 KingSunSha(弱水三千)
    我这样理解对吗:
    我通过某个角色赋予了一个用户对某个table有SELECT,UPDATE等权限,那么我在应用程序里可以直接使用sql语句来操作这个表,而如果我要使用pl/sql写存储过程来操作这个表就没有权限了,一定要把对这个table的SELECT,UPDATE等权限直接赋给这个用户