我正在重写一个导入和导出oracle数据库的应用程序。我使用的是从代码中作为进程执行的imp.exe和exp.exe。现在我尝试使用impdp和expdp来代替它们。我在https://docs.oracle.com/上研究了一些示例,但是下面的代码在DBMS_DATAPUMP.ADD_FILE上失败了。
DECLARE
h2 NUMBER;
BEGIN
h2 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL, 'MYJOB', 'LATEST');
DBMS_DATAPUMP.ADD_FILE(h2,'test1.dmp','datapump_dir');
DBMS_DATAPUMP.METADATA_FILTER(h2,'SCHEMA_EXP','IN (''sc900'')');
DBMS_DATAPUMP.START_JOB(h2);
dbms_datapump.detach(h2);
END; 错误输出为
ORA-39001: invalid argument value
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.DBMS_DATAPUMP", line 3507
ORA-06512: at "SYS.DBMS_DATAPUMP", line 3756当'sys‘和'datapump_dir’创建语句成功执行时,我已连接。
我做错了什么?提前感谢!
发布于 2018-01-10 21:57:25
如果有人对此感兴趣,我找到了问题的原因。由于某些原因,即使我指定了默认目录,它也无法工作。但是,当我将null传递给这个参数时,它就可以工作了。下面的代码可以工作,唯一的缺点是我只能保存到默认目录
DECLARE
h2 NUMBER;
BEGIN
h2 := DBMS_DATAPUMP.OPEN('EXPORT', 'SCHEMA');
DBMS_DATAPUMP.ADD_FILE(h2, 'example0.dmp', null);
DBMS_DATAPUMP.METADATA_FILTER(h2,'SCHEMA_EXPR', q'{IN ('SC900')}');
DBMS_DATAPUMP.START_JOB(h2);
DBMS_DATAPUMP.DETACH(h2);
END;
/https://stackoverflow.com/questions/48187541
复制相似问题