将部分数据从csv插入到oracle表中

时间:2017-01-09 08:37:42

标签: oracle csv oracle11g sql-loader

我有一个CSV(竖线分隔)文件,如下所示

ID|NAME|DES
1|A|B
2|C|D
3|E|F

我需要将数据插入临时表中,我已经安装了SQLLODER,但我的表只有一列。以下是从csv加载的控制文件配置。

OPTIONS (SKIP=1)
LOAD DATA 
CHARACTERSET UTF8
TRUNCATE
 INTO TABLE EMPLOYEE
 FIELDS TERMINATED BY '|'
TRAILING NULLCOLS 
(
NAME
)

如何从csv中的第二列中选择数据并仅插入表EMPLOYEE中的一列?

如果您有任何疑问,请与我们联系。

2 个答案:

答案 0 :(得分:1)

如果你正在使用a filler field,你不需要在数据库表中有匹配的列 - 这就是真正的重点 - 只要你知道你感兴趣的字段就是第二个,如果文件中有额外的字段,你不需要修改控制文件,你只需要指定它们。

所以这很有用,只添加了填充ID字段和您显示的三字段数据文件:

None

Dmoe'd with:

case class Player(name: String)

def lookupPlayer(id: Int): Option[Player] = {
  if (id == 1) Some(new Player("Sean"))
  else if(id == 2) Some(new Player("Greg"))
  else None
}

def lookupScore(player: Player): Option[Int] = {
  if (player.name == "Sean") Some(1000000) else None
}

println(lookupPlayer(1).map(lookupScore))  // Some(Some(1000000))
println(lookupPlayer(2).map(lookupScore))  // Some(None)
println(lookupPlayer(3).map(lookupScore))  // None

向数据文件添加更多字段没有区别,只要它们位于您实际感兴趣的字段之后。同样适用于external tables,这对于临时/临时表更方便,只要CSV文件在数据库服务器上可用。

答案 1 :(得分:0)

数据文件中需要从负载中排除的列可以定义为FILLER。

在给定的示例中使用以下内容。列出所有传入字段并向这些列添加填充符需要从加载中忽略,例如 ( ID FILLER, 名称, DES FILLER ) 这里的另一个问题是忽略标题行,因为只需使用OPTIONS子句,例如 OPTIONS(SKIP = 1) 加载数据......

此致 R上。