DBMS_DDL系统包中ALTER_COMPILE和ANALYZE_OBJECT
我在同一用户下调用这两个包,可是前都失败,后者成功;我在SYS用户下执行对ALTER_COMPILE 调用(与前一用户同样语句)却可以成功,这是为什么呢。
------------------------------------------------------
在BLQT用户下执行如下语句
SQL> EXEC DBMS_DDL.alter_compile(\'PROCEDURE\',\'BLQT\',\'PROC1\');
begin DBMS_DDL.alter_compile(\'PROCEDURE\',\'WYJ\',\'PROC1\'); end;
ORA-04047: 指定的对象与指定的标志不兼容
ORA-06512: 在\"SYS.DBMS_UTILITY\", line 114
ORA-06512: 在\"SYS.DBMS_DDL\", line 86
ORA-06512: 在line 1
SQL> EXEC dbms_ddl.analyze_object(\'TABLE\',\'BLQT\',\'C\',\'COMPUTE\');
PL/SQL procedure successfully completed
在SYS用户下执行如下语句
SQL> exec dbms_ddl.alter_compile(\'PROCEDURE\',\'WYJ\',\'DROP_TABLE\');
PL/SQL procedure successfully completed
---------------------------------------------------------------------------------
BLQT用户拥有角色如下
SQL> select GRANTEE,GRANTED_ROLE from dba_role_privs where grantee=\'BLQT\';
GRANTEE
GRANTED_ROLE
------------------------------ ------------------------------
BLQT
DBA
BLQT
CONNECT
BLQT
RESOURCE
BLQT
EXP_FULL_DATABASE
BLQT
IMP_FULL_DATABASE
SQL> select * from user_sys_privs;
USERNAME
PRIVILEGE
ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
WYJ
ALTER ANY PROCEDURE
NO
WYJ
UNLIMITED TABLESPACE
YES |