我按书上创建了这样一个存储过程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权限。求指教

解决方案 »

  1.   

    你这个dba用户是在哪个表空间上建的?
      

  2.   

    /*第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_KTRdatafile '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;  
    按这个过程创建的
      

  3.   

    可能需要显式授权,
    sys用户登陆,
    然后
    grant create table to username;
      

  4.   

    加上这个就好了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;