RDSADMIN.RDS_FILE_UTIL.LISTDIR работает из блока, а не в процедуре - PullRequest
3 голосов
/ 08 марта 2019

Сегодня я следовал инструкциям , чтобы выполнить интеграцию Oracle RDS с S3 для импорта файлов из корзины S3 в каталог базы данных.

Я смог хорошо выполнить все шаги и увидеть файлы, импортированные из моей корзины S3, в каталог DATA_PUMP_DIR на экземпляре RDS.

Когда я запускаю запрос

SELECT filename FROM table(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) order by mtime;

, я получаю выходные данные со списком импортированных файлов.

Теперь я планирую получить эти файлы в блоке PLSQL ипроблема возникает здесь.Когда я запускаю что-то вроде этого:

DECLARE
BEGIN
  FOR fn in (SELECT * FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime)
  LOOP
    dbms_output.put_line('File name is ' || fn.filename);
  END LOOP;  
END;

, я вижу вывод в окне вывода dbms.

Однако, когда я пытаюсь вызвать этот внутри процедуры например:

CREATE OR REPLACE PROCEDURE test1 IS
BEGIN
  FOR fn in (SELECT * FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime)
  LOOP
    dbms_output.put_line('File name is ' || fn.filename);
  END LOOP;  
END test1;

Я получаю сообщение об ошибке:

3/14 PL / SQL: оператор SQL игнорируется
3/43 PL / SQL: ORA-01031: недостаточно привилегий

Я искал в Интернете эту ошибку и не смог получить потенциальных клиентов.

Я пытался написать процедуру с правами invoker

CREATE OR REPLACE PROCEDURE test1 AUTHID CURRENT_USER IS

, и она все еще выдала мне ту же ошибку.

Может кто-нибудь, пожалуйста, пролить свет на это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...