使用sql loader加载数据

时间:2016-07-26 14:51:28

标签: oracle sql-loader

需要快速帮助。 我有一个文件,其中包含巨大的管道分隔数据。 我想将数据文件的每一行加载到表中的列。 但是数据文件中的每一行都有多个管道。 在加载数据时,我正在使用管道作为分隔符加载到多个列,使用下面的控制文件查询。

LOAD DATA 
INTO TABLE sc8157.tmp_analysis_01
APPEND 
FIELDS TERMINATED BY '|' 
TRAILING NULLCOLS 
(
  ABD_ERRORMESSAGE,
  ISSUE_NO CONSTANT 'FIT-33266_all'
)

但现在我想将整行加载到一列。任何人都可以帮我写控制文件的查询? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

也许更简单的方法是更改​​输入文件中的分隔符。 您的输入文件和CTL文件中必须具有相同数量的参数。

如果输入文件中的分隔符与CTL文件不同,则整行将插入一列。

答案 1 :(得分:0)

告诉sqlldr字段分隔符是回车符。在这个工作示例表中,“test”有4列。 File test.dat还有4个以管道分隔的列。 Sqlldr只看到数据中的一列,因为我告诉它回车结束了字段。控制文件刚刚指定了一个与表中的列名匹配的字段,以便它插入数据。

LOAD DATA
infile "test.dat"
TRUNCATE
INTO TABLE test
FIELDS TERMINATED BY x'0D'
(cola char(1000)
)

哦,请注意你应该在控制文件中的“char”后面的表中定义字段的大小,否则sqlldr使用一个相对较小的默认值(256?)并且会抛出一个“字段”小的“或类似错误的东西会让你疯狂试图追踪。我很惊讶sqlldr不会自动查询系统表以获取实际的列大小并使用它。也许这是一个很好的理由。无论如何,我会编辑我的例子。另外VARCHAR2的大小限制为4000个字符,所以你说你有一个巨大的行,你可能面临大小限制。