0

我已经创建了这样的程序,这可以正常工作SYSSYSDBA但是我想运行我新创建的用户帐户,DEMOUSER请帮助我....

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;
/
4

1 回答 1

2

您必须将已使用对象的 SELECT 权限授予您的用户(作为 SYS):

GRANT SELECT ON dba_free_space TO demouser;
GRANT SELECT ON dba_data_files TO demouser;

之后,您可以在 DEMOUSER 模式中创建您的过程。

而且,顺便说一句:您永远不应该在 SYS 模式中创建或更改对象。AFAIK,这将失去从 Oracle 获得支持的任何机会。

于 2013-08-21T10:34:29.427 回答