0
点赞
收藏
分享

微信扫一扫

奇怪,怎么我有权限,但是不能在procedure建表呀


 

  • 作者:​​三十而立​​
  • 时间:2009年10月28日 9:41:15
  • 请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“​​inthirties(三十而立)​​ ”
  • 今天用execute immediate动态执行了创建表的动作,发现居然告诉我没有权限。测试代码很简单。

create or replace procedure dynamicCreateTable(v number) is
begin
dbms_output.put_line(v);
execute immediate ‘create table test1.pt_’||v||’ (id int)’;
end dynamicCreateTable;

  • 执行出现错误SQL> exec dynamicCreateTable(12223);BEGIN dynamicCreateTable(12223); END;*第 1 行出现错误:ORA-01031: 权限不足

ORA-06512: 在 “TEST1.DYNAMICCREATETABLE”, line 4
ORA-06512: 在 line 1
改成pl/sql 块执行
SQL> begin
2 execute immediate ‘create table test1.pt_1112 (id int)’;
3 end;
4 /


  • PL/SQL 过程已成功完成。
    很奇怪的现象。
    接着查看oracle的文档,才发现,是权限的问题
    test1赋予了两个role权限 connect和resource
    而在procedure里,是不会识别role权限的
    这样我赋上create table的权限给test1用户就解决了
    SQL>grant create table to test1;
    SQL> exec dynamicCreateTable(1222);
    PL/SQL 过程已成功完成。
    这样一些很细节的知识点还是记下来为好。


  • 如果没有那句“三十而立”,三十岁的男人正可以轻轻松松


举报

相关推荐

0 条评论