dbms_datapump.get_dumpfile_info не может прочитать каталог при компиляции в хранимой процедуре - PullRequest
0 голосов
/ 20 ноября 2018

Я создаю хранимую процедуру для загрузки (impdp) дампа базы данных Datapump.

Я пытаюсь получить дату создания файла дампа (для сравнения с датой ранее загруженного дампа), используя DBMS_DATAPUMP.GET_DUMPFILE_INFO, как в этом примере .

При работе в анонимном блоке (как показано ниже) он работает нормально, выводя дату создания файла дампа.Однако, когда этот же блок адаптируется и компилируется в хранимой процедуре, я получаю ошибку ORA-39087 (имя каталога неверно).

DECLARE 
  dumpfile VARCHAR2(256) := 'my_file.dp';
  dir VARCHAR2(30) := 'MY_DIR';
  info ku$_dumpfile_info;
  ft NUMBER;
BEGIN
  sys.dbms_datapump.get_dumpfile_info(dumpfile, dir, info, ft);
  FOR rec IN (SELECT * FROM TABLE (info) WHERE item_code = 6 ) LOOP 
    dbms_output.put_line(rec.value);
  END LOOP;
END;

Каталог существует.Имя действительно.Когда я запускаю

SELECT * FROM datapump_dir_objs;

с тем же пользователем, я вижу, что пользователь имеет права READ и WRITE на каталог.Версия Oracle - 11g. Выпуск 11.2.0.4.0.

Есть сведения о том, что я делаю неправильно?

Заранее спасибо.

1 Ответ

0 голосов
/ 21 ноября 2018

Проблема заключалась в том, что привилегии READ и WRITE для каталога были добавлены через роль.По умолчанию анонимные блоки выполняются с правами текущего пользователя, но хранимые процедуры - нет.

Я добавил AUTHID CURRENT_USER в заголовок процедуры и смог получить доступ к своему каталогу.

Спасибо АлексуПул для понимания.

...