从PL-SQL过程中执行SQLLDR

时间:2015-07-01 17:20:35

标签: oracle plsql sql-loader

您好,并提前致谢。我正在运行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;

--------------------------结束代码示例------------------ -

在这里感谢任何帮助。我知道这可以做到.....

1 个答案:

答案 0 :(得分:0)

SQLLDR 没有选择要在PL / SQL中执行的选项,但是您可以使用PL / SQL模拟 SQLLDR

是的,这是可能的,我创建了一个存储过程,该存储过程仅与 REGEXP 配合使用,现在的文档是西班牙文,但我将尽快对其进行翻译。

Here is the link

性能?是的,我现在模拟一个SQLLDR会影响数据库的性能,但是,这就是我使用 REGEXP 的原因em>。这对我加载海量数据非常有用。

另一件事是,此PL / SQL给您提供了转换数据的机会。您可以为此使用ETL,但有时无法实现:(。

很容易理解:D!