0

私はこのような手順を作成しました,これは動作します,しかし、私はこれを実行したいです私の新しく作成されたユーザーアカウントは私を助けてくださいSYS....SYSDBADEMOUSER

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 スキーマでオブジェクトを作成したり変更したりしないでください。私の知る限り、これにより、Oracleからサポートを受ける可能性がなくなります。

于 2013-08-21T10:34:29.427 に答える