使用单个ctl文件Sql Loader将来自多个数据文件的数据加载到具有不同值的单个表中

时间:2015-05-27 10:09:58

标签: oracle sql-loader

我有1000个加载文件,我知道我们可以将多个文件加载到一个表中,如下所示:

LOAD DATA
  INFILE file1.txt
  INFILE file2.txt

  APPEND
  INTO TABLE emp
  ( empno  POSITION(1:4)   INTEGER EXTERNAL,
    ename  POSITION(6:15)  CHAR,
    deptno POSITION(17:18) CHAR,
    mgr    POSITION(20:23) INTEGER EXTERNAL
  )

但我的问题是:我想将 file1.txt 的数据插入到emp表中,其中包含一些常量值“Cons1”并且具有一些不同的常量值文件 file2.txt 的“Cons2”

我真的很喜欢这个并且在网上做了很多尝试。非常感谢你们的帮助。

 LOAD DATA
  INFILE file1.txt 
  APPEND
  INTO TABLE emp
  ( empno  POSITION(1:4)   INTEGER EXTERNAL,
    ename  POSITION(6:15)  CHAR,
    deptno POSITION(17:18) CHAR,
    mgr    POSITION(20:23) INTEGER EXTERNAL,
    **ConstColumn constant "Cons1"**
  )
 INFILE file2.txt  
  APPEND
  INTO TABLE emp
  ( empno  POSITION(1:4)   INTEGER EXTERNAL,
    ename  POSITION(6:15)  CHAR,
    deptno POSITION(17:18) CHAR,
    mgr    POSITION(20:23) INTEGER EXTERNAL,
    **ConstColumn constant "Cons2"**
  )

1 个答案:

答案 0 :(得分:0)

SQL * Loader只是从所有文件中获取输入,就像它们是一个文件一样,仍将所有行视为来自一个文件。每个文件都必须有一个标识列,指示它来自哪个文件,然后您将使用多个WHEN子句键入该文件。有1000个文件,如果文件确实相同并且不具备该结构,那么任务似乎令人生畏。无论如何,维护该控制文件将是一场噩梦。

您可以使用占位符为常量创建一个骨架控件文件,然后编写一个包装器程序,该程序将遍历文件夹中的文件,并为每个文件复制骨架并用所需的常量文本替换占位符,然后调用SQL * Loader,使用命令行参数传递文件名并使用该控制文件。

让我们知道你最终是如何解决这个问题的。