我的code如下:
create or replace procedure g_test is
begin
tab_name varchar2(20);
SQL_STR varchar2(100);
select sysdate into tab_name from dual;
SQL_STR := 'create table ' || 'username.temp_' || substr(tab_name,1,2) || ' (no int)';
EXECUTE IMMDIATELY SQL_STR;
end g_test;
在命令行中调用该存储过程时却报没有权限,这是什么原因呢?正确的code应该是什么样的呢?
9 个解决方案
#1
重新拿管理员的权限给当期用户赋创建表的权限
#2
你的当前用户授权是不是 直接grant dba to <用户> 搞定的
如果是 grant create any table to <用户>,然后再运行就可以了
如果是 grant create any table to <用户>,然后再运行就可以了
#3
你建立和调用时同一个用户?如果不是调用的那个用户应该要有execute any procedure 系统权限的
#4
我在自己的用户名下创建表,直接create username.temp_20120221是可以创建的,为什么存储过程中就不行喃?
#5
封装体内需要直接权限 封装体外只需要间接权限。
#6
那直接权限,只需要创建我的用户名下的表,这怎么赋权限呢
grant create any table to <用户>,这样的话是不是把其他用户名下的表的创建权限也给我了?
grant create any table to <用户>,这样的话是不是把其他用户名下的表的创建权限也给我了?
#7
up,up,up
#8
使用sys用户
执行 grant create table to <用户>;
然后再执行你的procedure。
执行 grant create table to <用户>;
然后再执行你的procedure。
#9
这样的话,我是不是有不止是我用户下的建表权限,还有了在别的用户下的建表权限呢?
#1
重新拿管理员的权限给当期用户赋创建表的权限
#2
你的当前用户授权是不是 直接grant dba to <用户> 搞定的
如果是 grant create any table to <用户>,然后再运行就可以了
如果是 grant create any table to <用户>,然后再运行就可以了
#3
你建立和调用时同一个用户?如果不是调用的那个用户应该要有execute any procedure 系统权限的
#4
我在自己的用户名下创建表,直接create username.temp_20120221是可以创建的,为什么存储过程中就不行喃?
#5
封装体内需要直接权限 封装体外只需要间接权限。
#6
那直接权限,只需要创建我的用户名下的表,这怎么赋权限呢
grant create any table to <用户>,这样的话是不是把其他用户名下的表的创建权限也给我了?
grant create any table to <用户>,这样的话是不是把其他用户名下的表的创建权限也给我了?
#7
up,up,up
#8
使用sys用户
执行 grant create table to <用户>;
然后再执行你的procedure。
执行 grant create table to <用户>;
然后再执行你的procedure。
#9
这样的话,我是不是有不止是我用户下的建表权限,还有了在别的用户下的建表权限呢?