您好,并提前致谢。我正在运行Oracle 11gR2并且想要尝试执行sql加载程序以将数据插入到现有表中。我通过数据库中的Java存储过程尝试这个,它将在操作系统上执行命令。我遇到的问题是我似乎无法调用SQLLDR.EXE来调用 - 我遇到的错误是:找不到sqlldr(请注意,由于Oracle可执行文件是SETUID,因此无法使用PATH进行查找)
----------------------示例代码----------------------- -------------------
declare
l_ldr varchar2(1000) := '/u01/app/oracle/product/db/11.2.0.4/bin/sqlldr.exe control=C:\ad\controlfile.ctl, log=load.log, bad=load.bad,data=C:\somefile.txt';
l_env varchar2(1000) := 'PATH=/bin:/u01/oracle/db/11.2.0.4/jdk/bin;';
l_out varchar2(5000);
l_ret varchar2(5000);
begin
dbms_output.put_line(l_ldr);
MSO_Java.dbcmd('sqlldr.exe',
l_ldr,
l_env,
'Y',
l_out,
l_ret);
dbms_output.put_line(l_ret);
dbms_output.put_line(l_out);
end;
--------------------------结束代码示例------------------ -
在这里感谢任何帮助。我知道这可以做到.....
答案 0 :(得分:0)
SQLLDR 没有选择要在PL / SQL中执行的选项,但是您可以使用PL / SQL模拟 SQLLDR 。
是的,这是可能的,我创建了一个存储过程,该存储过程仅与 REGEXP 配合使用,现在的文档是西班牙文,但我将尽快对其进行翻译。
性能?是的,我现在模拟一个SQLLDR会影响数据库的性能,但是否,这就是我使用 REGEXP 的原因em>。这对我加载海量数据非常有用。
另一件事是,此PL / SQL给您提供了转换数据的机会。您可以为此使用ETL,但有时无法实现:(。
很容易理解:D!