存储过程中不能有truncate等语句

解决方案 »

  1.   

    我 用delete from 也是同一个问题
      

  2.   

    分只给我一个人上面有同样问题的另开贴给我分,我急需分!
    问:  调用存储过程权限不足(存储过程中使用了dbms_sql),迷惑很久的问题    本人建立用户libuser,权限:CONNECT ,DBA,RESOURCE,UNLIMITED TABLESPACE
    并且用internal登陆为libuser赋对象权限:sys下的DBMS_SYS_SQL,DBMS_SQL
    建立存储过程MY_CRT_TABLE1如下:
    (功能:建表,表名由参数指定,字段为a,b) (tblname varchar2)
     is
       sqlstr varchar2(400);
       acur integer ;
       ignore integer;
     begin
       sqlstr := 'create table '||tblname||'(a varchar2(20),b varchar2(20))';
       acur := dbms_sql.open_cursor;
       dbms_sql.parse(acur,sqlstr,dbms_sql.native);
       ignore := dbms_sql.execute(acur);
       dbms_sql.close_cursor(acur);
      end MY_CRT_TABLE1;sqlplus中以libuser登陆调用如下:exec my_crt_table1('kk');报错如下;
    *
    ERROR 位于第 1 行:
    ORA-01031: 权限不足
    ORA-06512: 在"SYS.DBMS_SYS_SQL", line 782
    ORA-06512: 在"SYS.DBMS_SQL", line 32
    ORA-06512: 在"LIBUSER.MY_CRT_TABLE1", line 10
    ORA-06512: 在line 1
    难道没人碰到过这样的问题吗?谢高手指点,迷惑很久了。
      
     
    答:还需为libuser添加系统权限:create table,即要为动态sql中的命令赋相应的系统权限。
    加create table 权限,在用户里面加吧--------------------------------------------
    【ORACLE回复手册】.txt
    ===============================================================
    此文章已经作为回复使用次数:
    ==============================================================================================================================
    创建表空间,用户,赋权限问题
    此文章已经作为回复使用次数:1
    ===============================================================
    connect system/manager@testdb
    1.创建表空间:
    create tablespace library 
      datafile 'c:\oracle\oradata\test3\library.ora' size 10m;2.创建用户
    create user "LIBUSER" profile "DEFAULT" IDENTIFIED BY "yourpassword"
       default tablespace "LIBRARY"
       temporary tablespace "temp"
       account unlock ;3.赋权限:
    grant "CONNECT","DBA","RESOURCE",CREATE ANY TABLE ,UNLIMITED TABLESPACE
    TO "LIBUSER"删权限
    revoke "CONNECT","DBA","RESOURCE",CREATE ANY TABLE ,UNLIMITED TABLESPACE from "LIBUSER"