6

関数内から Oracle メタデータ テーブルの情報にアクセスしようとしています。例 (意図的に簡略化):

CREATE OR REPLACE PROCEDURE MyProcedure
IS
    users_datafile_path VARCHAR2(100);
BEGIN
    SELECT file_name INTO users_datafile_path
        FROM dba_data_files
        WHERE tablespace_name='USERS'
        AND rownum=1;
END MyProcedure;
/

このコマンドを sqlplus プロセスで実行しようとすると、次のエラーが発生します。

LINE/COL ERROR
-------- -----------------------------------------------------------------
5/5      PL/SQL: SQL Statement ignored
6/12     PL/SQL: ORA-00942: table or view does not exist

同じ sqlplus プロセスから次のコマンドを実行すると、期待される情報が表示されるため、ユーザーがテーブルにアクセスできることはわかっています。

SELECT file_name
    FROM dba_data_files
    WHERE tablespace_name='USERS'
    AND rownum=1;

結果は次のとおりです。

FILE_NAME
--------------------------------------------------------------------------------
/usr/lib/oracle/xe/oradata/XE/users.dbf

私が別のことをする必要があることはありますか?

4

4 に答える 4

5

それが役割SELECTを介した許可であるだけでなく、ユーザーが実際に許可を持っていることを確認してください。役割による付与はパッケージには適用されません。asktom.oracle.comでこの投稿を参照してください。

また、sys.dba_data_filesの代わりに試してくださいdba_data_files

于 2010-04-08T18:48:14.180 に答える
0

テーブル名の前に次のように付けてみsys.ましたか

FROM sys.dba_data_files
于 2010-04-08T18:49:53.477 に答える
-1

からデータを選択するにはdba_data_files、SELECT from SYS ユーザーを USER に付与します。例:

GRANT SELECT ON dba_data_files TO YOUR_USER;

その後、プロシージャを再コンパイルします。

于 2012-03-05T23:22:13.990 に答える