我创建了这样的程序,这是SYS
和SYSDBA
的工作,但是我想要运行这个新创建的用户帐户DEMOUSER
请帮助我...... / p>
CREATE OR REPLACE PACKAGE E_Types as
PROCEDURE TestProc (p_recordset OUT SYS_REFCURSOR);
END E_Types;
/
CREATE OR REPLACE PACKAGE BODY E_Types IS
PROCEDURE TestProc (p_recordset OUT SYS_REFCURSOR) IS
BEGIN
OPEN p_recordset
FOR select a.TABLESPACE_NAME Tablespace
, round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2) Percentages
from (
select TABLESPACE_NAME
, sum(BYTES) BYTES
from sys.dba_data_files
group by TABLESPACE_NAME
) a
, (
select TABLESPACE_NAME
, sum(BYTES) BYTES
from sys.dba_free_space
group by TABLESPACE_NAME
) b where a.TABLESPACE_NAME = b.TABLESPACE_NAME (+)
order by ((a.BYTES-b.BYTES)/a.BYTES) desc
;
END;
END;
/
答案 0 :(得分:1)
您必须向用户授予对用户的SELECT权限(作为SYS):
GRANT SELECT ON dba_free_space TO demouser;
GRANT SELECT ON dba_data_files TO demouser;
之后,您可以在DEMOUSER模式中创建您的过程。
而且,BTW:您应该永远创建或更改SYS架构中的对象。 AFAIK,这将无法获得Oracle的支持。