Как получить доступ к системным таблицам Oracle изнутри МН функционального / функционального SQL или процедура?

Я пытаюсь получить доступ к информации от таблицы метаданных 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

Есть ли что-то, что я должен сделать по-другому?

5
задан OMG Ponies 1 April 2011 в 01:21
поделиться

2 ответа

Убедитесь, что SELECT не только предоставляется через роль , но и что пользователь действительно имеет разрешение. Гранты по ролям не распространяются на пакеты. См. Это сообщение на asktom.oracle.com .

Также попробуйте sys.dba_data_files вместо dba_data_files .

4
ответ дан 15 December 2019 в 00:55
поделиться

Вы пытались добавить к имени таблицы префикс sys. как в

FROM sys.dba_data_files
0
ответ дан 15 December 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: