- 作者:三十而立
- 时间: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 过程已成功完成。
这样一些很细节的知识点还是记下来为好。
- 如果没有那句“三十而立”,三十岁的男人正可以轻轻松松