日期:2014-05-17  浏览次数:20816 次

一个权限的问题
我按书上创建了这样一个存储过程

CREATE PROCEDURE EXEC_DDL(DDL_STRING IN VARCHAR2)
IS
BEGIN
  EXECUTE IMMEDIATE DDL_STRING;
END EXEC_DDL;
后面我执行存储过程报错

BEGIN
    EXEC_DDL('CREATE TABLE DD(ID INT,FNAME VARCHAR2(100))');
END;
说我权限不足,
查看什么乱七八糟的堆栈说是这句
EXECUTE IMMEDIATE DDL_STRING;
说明下,我登陆的用户是DBA权限。求指教
------最佳解决方案--------------------
可能需要显式授权,
sys用户登陆,
然后
grant create table to username;
------其他解决方案--------------------
加上这个就好了authid current_user

 CREATE OR REPLACE PROCEDURE EXEC_DDL(DDL_STRING IN VARCHAR2) authid current_user
 IS
 BEGIN
   EXECUTE IMMEDIATE DDL_STRING;
 END EXEC_DDL;

------其他解决方案--------------------
你这个dba用户是在哪个表空间上建的?
------其他解决方案--------------------
/*第1步:创建临时表空间  */

create temporary tablespace user_temp  

tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' 

size 50m  

autoextend on  

next 50m maxsize 20480m  

extent management local;  


/*第2步:创建数据表空间  */

create tablespace DC_KTR

datafile 'E:\oracle\product\10.2.0\oradata\orcl\dc_ktr.dbf' 

size 5000m  

autoextend on  

next 50m maxsize 20480m  

extent management local;  

 

/*第3步:创建用户并指定表空间  */

create user username identified by password  

default tablespace user_data  

temporary tablespace user_temp;  

 

/*第4步:给用户授予权限  */

grant connect,resource,dba to username;  


按这个过程创建的