1

我需要使用 SQL*Loader 将平面文件加载到 oracle 数据库中。
平面文件包含一个包含换行符作为有效数据的字段。
该文件不是由换行符分隔的行。

我将如何修改以下控制文件来执行此操作?

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  
...
4

3 回答 3

1

您可以指定字段的位置:

load data
append
into table TABLE_NAME
(
FIELD1 POSITION(51:55),
FIELD2 POSITION(60:67),
FIELD3 EXPRESSION "CONSTANT_VALUE",
FIELD4 SEQUENCE,
FIELD5 EXPRESSION "current_timestamp(3)",
)

在上面的示例FIELD1中,从 char 51 到 55(包括在内),FIELD2从 60 到 67。

FIELD3固定为我们想要的值,FIELD4生成内部序列并FIELD5获取当前时间戳。

于 2020-12-23T17:14:48.750 回答
0

我自己从未尝试过,但显然,您需要找出它们用作行分隔符的内容。并将该字符作为十六进制传递。这个拿起 5E 这是#

在文件 test.dat "str X'5E'" 中加载数据

虽然不知道它适用于哪些版本,但可能值得按 F1 键并寻找行分隔符..

???没有行分隔符。哦,如果你想使用 SQL*Loader 之类的东西,那么必须在其中写一些东西。

于 2012-02-06T22:05:23.523 回答
0

这里的问题是每一行都将被解释为平面文件中的一条记录,而不是一个字段。我猜您可能必须使用分隔符(例如逗号、制表符或竖线“|”)重新格式化文件 使用 '\n' 以便加载程序将其解释为单个记录。任何出现的新行 '\n' 都将被视为我认为的新记录。请参阅下面的链接-

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

您无法获取传入文件的格式,但您可以读取该文件并为 SQL 加载器创建正确格式化的 mydata.dat。关键是要让加载程序理解“你的记录终结者是什么?”,否则你的文件就像一个巨大的记录。

于 2012-02-06T21:45:54.273 回答