【发布时间】:2018-11-21 18:51:03
【问题描述】:
我正在创建一个存储过程来加载 (impdp) Datapump 数据库转储。
我正在尝试使用 DBMS_DATAPUMP.GET_DUMPFILE_INFO, like in this example 获取转储文件的创建日期(与之前加载的转储日期进行比较)。
在匿名块中运行时(如下所示),它运行良好,输出转储文件的创建日期。但是,当在存储过程中调整和编译同一块时,我收到 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 Release 11.2.0.4.0。
我做错了什么?
提前致谢。
【问题讨论】:
-
用户是否拥有直接授予他们或通过角色授予的读写权限? (一种快速检查方法是查看您的查询在您执行
set role none后是否仍显示相同的数据。) -
感谢@AlexPoole!权限由角色授予。我在程序的标题中添加了
AUTHID CURRENT_USER,一切正常。
标签: oracle plsql directory datapump