查看: 603|回复: 0

在存储过程里动态执行sql来创建表 权限不够的解决办法

 关闭 [复制链接]

签到天数: 2623 天

连续签到: 2 天

[LV.Master]至尊海神IIIIII

发表于 2011-2-19 12:41 |广东| 显示全部楼层 |阅读模式
在存储过程里动态执行sql来创建表 权限不够的解决办法



场景如下:

-- Created on 2011-2-12 by ADMINISTRATOR
declare
TableName_         varchar2(32) := 'sp_warehousecheckserial';
      
  sqlstr_ varchar2(1000);
begin
  
sqlstr_ := 'create table temp_'|| TableName_ || '
as
select c.sguid,
        c.slogconfigid,
        c.scolumnname
from sys_logconfig f ,
      sys_logconfigdetail c
where f.sguid = c.slogconfigid
       and f.stablename = ''' || TableName_ || '''';  

execute immediate sqlstr_;

end;


上面这样子执行是成功的。



-------------------------------------------------------
封装成存储过程来执行就出问题:

create or replace procedure pd_CreateValueTable(
       TableName_           in      varchar2
      
) is
  sqlstr_ varchar2(1000);
begin

sqlstr_ := 'create table temp_'|| TableName_ || '
as
select c.sguid,
        c.slogconfigid,
        c.scolumnname
from sys_logconfig f ,
      sys_logconfigdetail c
where f.sguid = c.slogconfigid
       and f.stablename = ''' || TableName_ || '''';  
/*sqlstr_ :='create table temp_'|| TableName_  || '( aa varchar2(32))';*/
execute immediate sqlstr_;


      
      
end pd_CreateValueTable;

------------

declare
  -- Local variables here
  i integer;
begin
  -- Test statements here
  steel.pd_createvaluetable('sp_warehousecheckserial');

end;



------------------------

提示权限不够。


当时的用户还具有了DBA的权限,可为什么还是不行,百思不得其解。

最后,解决办法如下:

grant create any table to 用户名;


问题解决了。

PCOS系统下载站:http://zhuangji.wang

本版积分规则