如何以普通用户身份运行此过程

时间:2013-08-21 10:15:44

标签: sql oracle

我创建了这样的程序,这是SYSSYSDBA的工作,但是我想要运行这个新创建的用户帐户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;
/

1 个答案:

答案 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的支持。