2012-02-06 51 views
1

我需要使用SQL * Loader将平面文件加载到oracle数据库中。
平面文件包含一个字段,其中包含换行符作为有效数据。
该文件不是由换行符分隔的行。如何使用没有行分隔符但带有换行符的字段的SQL * Loader加载固定宽度的数据文件?

我将如何修改下面的控制文件来做到这一点?

LOAD DATA 
INFILE 'mydata.dat' 
INTO TABLE emp 
(field1 POSITION(1:4) INTEGER EXTERNAL, 
    field2 POSITION(6:15) CHAR, 
    big_field POSITION(17:7000) CHAR 
) 

注意:我无法控制传入文件的格式。

Note: ... indicates that the data continues to the end of the field 

example: 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
... 

result: 
field1: 1234 
field2: 67890abcde 
big_field: ghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
... 
+0

实际数据是什么样的;有几个选择取决于它..?注意,Oracle中varchar字段的最大大小为4000个字符,所以你可能会遇到你的'big_field' – Ben 2012-02-06 20:58:26

+0

它会进入blob的问题,所以我们的长度很好。另外,这只是一个示例控制文件。 – ScrappyDev 2012-02-06 21:07:07

+0

即使对于固定长度的文件,您也需要某种类型的行分隔符。 我们能够让我们的提供者修改带有行分隔符的文件。 感谢大家的帮助! – ScrappyDev 2012-02-09 19:06:12

回答

0

这里的问题是,每一行将被解释为平面文件中的记录而不是字段。我猜你可能不得不用分隔符格式化文件,如逗号或选项卡或管道'|'与'\ n',以便装载机将其解释为单一记录。任何新行'\ n'的出现都将被视为我假设的新记录。参考链接如下─

http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_concepts.htm#sthref718

您可以输入文件不是格式,但可以读取该文件,并创建了SQL加载正确的格式MYDATA.DAT。关键是要让Loader了解'你的记录终结者是什么?',另外你的文件就像是一个巨大的记录。

+0

我们最终让我们的提供者创建了一个新文件。 – ScrappyDev 2012-02-09 19:10:49

+1

是的,这是这种情况下唯一的选择。显然,SQL Loader并不像我们想象的那么聪明。 :) – Annjawn 2012-02-09 21:21:28

0

从来没有尝试过自己,但很显然,你需要找出他们用什么作为行分隔符。 并以十六进制形式传递该char。这一次拿起5E是#

负载数据 INFILE TEST.DAT“海峡X'5E'”

不知道是什么版本,这是适用于但是,可能是值得打的F1键并寻找行分隔符。

????没有行分隔符。哦,如果你想使用像SQL * Loader这样的东西,那么就必须写一些东西到那里。

+0

我们最终让我们的提供者创建了一个新文件。 – ScrappyDev 2012-02-09 19:11:33

+0

迄今为止最简单的解决方案,因为它是可用的。我们可以将数据导出到文件的测试第三方的nunver数量丢失,停止在成功创建的文件.... – 2012-02-10 11:20:38

相关问题