2015-07-13 44 views
0

我想一些数据加载到一个表,但是数据源都有我想删除,并对此我NULL值要加载的SQLLOADER当子句包括空

我的控制页脚记录文件目前有:

echo "WHEN field1 <> 'FOOTER'" 

但这是放弃空记录(所有其他正在按预期工作)。

有没有一种方法可以包含一个'或'运算符,或者在单个控制文件中以两步加载的方式运行,例如:步骤1.处理除'FOOTER'之外的所有记录步骤2 - 处理所有NULL记录。

回答

0

我设法解决这个问题: 解决的办法是把它当作两个不同的负载,所以我的控制文件看起来像:

echo "APPEND INTO TABLE table.t1" 
echo "WHEN (1:1)=' '" 
echo "(" 
.... 
echo ")" 
echo "INTO TABLE table.t1" 
echo "WHEN field != 'FOOTER'" 
echo "(" 
.... 

然后处理NULL记录,然后处理非页脚记录。我在将field1的固定长度与NULL值进行匹配时遇到了困难 - 但是,只需要一次长度检查即可。

希望这回答了其他人也在努力的问题。

+0

OPTION子句中还有一个”LOAD = n“组件,允许您指定要加载的行数如果您使用LOAD = <文件中的行数 - 1>请看这里的OPTION子句:http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_control_file.htm#i1004788 –

+0

是的,我研究过这个,但是记录的数量是可变的,我还考虑从输入文件中删除页脚(重定向到另一个文件以保留原文)但是这些并不是我想要采用的方法,因为我希望自动加载过程尽可能地保持在表格之间的类似之处 - 唯一的区别是使用的控制文件 - 以便于调试和增强。 –

0

你可以试试这个...

load data 
infile ... 
into table ... 
... 
... 
when some_column != 'FOOTER' 
... 
fields terminated by ', ' 
+0

我已经尝试过这一点,它没有work.I可以删除when子句,它会按预期处理所有内容(单个页脚记录被丢弃),但是我不希望每一次这个过程都丢弃文件如果我能帮助它,就运行。我有:echo“APPEND INTO TABLE table.t1” echo“when field1!='FOOTER'” echo“fields terminated by'','' echo”(“ echo”field1 POSITION(01:07)\“ REPLACE(UPPER(:field1),'')\“,” echo“field2 POSITION(09:14)\”DECODE(:field2,'000000',NULL,TO_DATE(:field2,'DDMMYY'))\“ ,“... –