求帮助,oracle使用sqlldr导入多个txt到一个表,希望实现表中一个字段LY(来源)根据不同的txt,赋不同的默认值。

时间:2022-11-11 15:05:28
1、表test_member结构是 name,code,department
2、dept1.txt文件的内容是:
      技术部
      张三;2013123
      李四;2013234
      王五;2013345

      dept2.txt文件的内容是:
      采购部
      陈六;2013123
      赵七;2013234
      孙八;2013345

3、我的想法是,在ctl控制文件中,用类似case when的条件判断来实现,表中的department根据不同txt赋不同值,类似这样:
      load data
      characterset al32utf8
      infile "D:\dept1.txt"
      infile "D:\dept2.txt"
     into table test_member(
     name terminated by ';',
     code terminated by whitespace
     department constant ( case when infile="D:\dept1.txt" then "技术部"  when  infile="D:\dept2.txt" then "采购部"  else "" end)
)
上面这个case when是我瞎猜的,所以请大神帮忙看看,我想实现sqlldr根据不同的infile如何对表字段赋不同的默认值,改如何实现?如果我这种case when的想法可行,那控制文件该如何编写呢?

4 个解决方案

#1


没有发现这样的选项,不过以下两个方法,你参考一下

1、写多个 控制文件,分开导入

2、把多个文件加工一下,合并到一个文件中;

#2


引用 1 楼 wmxcn2000 的回复:
没有发现这样的选项,不过以下两个方法,你参考一下

1、写多个 控制文件,分开导入

2、把多个文件加工一下,合并到一个文件中;


谢谢帮忙出主意。
我的txt文件比较多 有上百个,一个txt一个控制文件,控制文件我也要写上百个。

我跟你的第2个方法想法差不多,现在卡在这了,我想通过批处理,把每个txt文件中,每行的最右侧拼接上第一行的内容。例如把每个txt由下面这个格式:

      技术部
      张三;2013123
      李四;2013234
      王五;2013345

通过批处理弄成这个样式:
      技术部;技术部
      张三;2013123;技术部
      李四;2013234;技术部
      王五;2013345;技术部

现在就是不知道这个批处理改怎么写 求帮助,oracle使用sqlldr导入多个txt到一个表,希望实现表中一个字段LY(来源)根据不同的txt,赋不同的默认值。

#3


应该是这个 ,楼主先研究一下

FOR /F %%i IN (file) DO command

#4


上百个这么夸张 求帮助,oracle使用sqlldr导入多个txt到一个表,希望实现表中一个字段LY(来源)根据不同的txt,赋不同的默认值。

那应该是程序生成的吧。

如果是少量文件的话可以考虑先把分号改成逗号,改成csv文件格式,打开,添加一列部门列,改成txt文件格式,再以txt打开,将逗号改成分号。

都是写手工活。 求帮助,oracle使用sqlldr导入多个txt到一个表,希望实现表中一个字段LY(来源)根据不同的txt,赋不同的默认值。

#1


没有发现这样的选项,不过以下两个方法,你参考一下

1、写多个 控制文件,分开导入

2、把多个文件加工一下,合并到一个文件中;

#2


引用 1 楼 wmxcn2000 的回复:
没有发现这样的选项,不过以下两个方法,你参考一下

1、写多个 控制文件,分开导入

2、把多个文件加工一下,合并到一个文件中;


谢谢帮忙出主意。
我的txt文件比较多 有上百个,一个txt一个控制文件,控制文件我也要写上百个。

我跟你的第2个方法想法差不多,现在卡在这了,我想通过批处理,把每个txt文件中,每行的最右侧拼接上第一行的内容。例如把每个txt由下面这个格式:

      技术部
      张三;2013123
      李四;2013234
      王五;2013345

通过批处理弄成这个样式:
      技术部;技术部
      张三;2013123;技术部
      李四;2013234;技术部
      王五;2013345;技术部

现在就是不知道这个批处理改怎么写 求帮助,oracle使用sqlldr导入多个txt到一个表,希望实现表中一个字段LY(来源)根据不同的txt,赋不同的默认值。

#3


应该是这个 ,楼主先研究一下

FOR /F %%i IN (file) DO command

#4


上百个这么夸张 求帮助,oracle使用sqlldr导入多个txt到一个表,希望实现表中一个字段LY(来源)根据不同的txt,赋不同的默认值。

那应该是程序生成的吧。

如果是少量文件的话可以考虑先把分号改成逗号,改成csv文件格式,打开,添加一列部门列,改成txt文件格式,再以txt打开,将逗号改成分号。

都是写手工活。 求帮助,oracle使用sqlldr导入多个txt到一个表,希望实现表中一个字段LY(来源)根据不同的txt,赋不同的默认值。