以普通用户连接数据库后
在命令窗口中执行下面语句,可生成AAA_TEMP
CREATE GLOBAL TEMPORARY TABLE AAA_TEMP AS (SELECT * FROM TEMP)但是执行procedure 
create or replace procedure aaa is
  S_SQL VARCHAR2(5000);
begin
  S_SQL:='CREATE GLOBAL TEMPORARY TABLE AAA_TEMP AS (SELECT * FROM TEMP)';
execute immediate S_SQL ; 
end aaa;
提示:ora-01031:insufficient privileges
(权限不够)以sys用户连接数据库后,但是执行procedure,无任何问题。
但是必须用普通用户连接数据库呀,
这个问题如何解决?
谢谢!

解决方案 »

  1.   

    SQL> create or replace procedure aaa is
      2    S_SQL VARCHAR2(5000);
      3  begin
      4    S_SQL:='CREATE GLOBAL TEMPORARY TABLE AAA_TEMP AS SELECT * FROM tbc';
      5  execute immediate S_SQL ; 
      6  end aaa;
      7  /过程已创建。SQL> exec aaa;
    BEGIN aaa; END;*
    ERROR 位于第 1 行:
    ORA-01031: 权限不足
    ORA-06512: 在"SCOTT.AAA", line 5
    ORA-06512: 在line 1
    SQL> conn internal/oracle
    已连接。
    SQL> grant create table to scott;授权成功。SQL> conn scott/tiger
    已连接。
    SQL> exec aaa;PL/SQL 过程已成功完成。SQL> select * from cat;TABLE_NAME                     TABLE_TYPE
    ------------------------------ -----------
    AAA_TEMP                       TABLE
    ACCOUNT                        TABLE
    BONUS                          TABLE
    DEPT                           TABLE
    EMP                            TABLE
    RECEIPT                        TABLE
    SALGRADE                       TABLE
    TB                             TABLE
    TBA                            TABLE
    TBC                            TABLE
    TBL                            TABLE已选择11行。SQL>
      

  2.   

    pl/sql中涉及的所有系统权限、对象权限都必须显式地授予用户,而不能通过角色获取。