SQLLDR和NULL要导入的列中的字段检测

问题描述:

SQLLDR和CTL文件SQLLDR和NULL要导入的列中的字段检测

已获取CSV文件以导入。

我想在我的CTL文件中指定只在我的CSV文件中的特定列中有空值的情况下插入到我的表中。 E.G我想只上传没有有终止日期的用户记录。

我已经试过各种选项

  • 当TERMINATIONDATE = ''
  • 当TERMINATIONDATE = “”
  • 当TERMINATIONDATE = NULL
  • 当TERMINATIONDATE = '空'

它只适用于当我使用 - 当TERMINATIONDATE!='' 然后我让我的所有员工都被终止。 但我想相反......

看起来好像毕竟是可能的吗?

我CTL文件

OPTIONS (SKIP=1) 
LOAD DATA 
INFILE 'C:\temp\users.csv' 
BADFILE 'C:\temp\users.bad' 
DISCARDFILE 'C:\temp\users.dsc' 
TRUNCATE 
INTO TABLE "alawakaba"."users" 
When TERMINATIONDATE = '' 
FIELDS TERMINATED BY '|' 
OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
(
ID, 
FIRSTNAME, 
LASTNAME, 
FUNCTION, 
DEPARTMENT, 
COSTCENTER, 
HIREDATE, 
Field8 FILLER, 
TERMINATIONDATE, 
LOCCODE 
) 

(Column8只是一个我不需要,所以我跳过我)

tnxs因为你的见解。

它应该具有以下条款工作:

WHEN TERMINATIONDATE = BLANKS 
+0

没有做:(它只是忽略了所有他们的把戏。不知何故,SQLLDR无法使用带空格的时间 – KriZ 2011-05-26 07:06:48

哦,我明白了.. 这不是最终的解决方案,并具有一些开销,但我可以在2个运行

一)运行做到这一点如上面的CTL。 更改
当TERMINATIONDATE = ''

当TERMINATIONDATE =! ''

丢弃的记录将被注入到DISCARDFILE 'C:\ TEMP \ users.dsc' 现在我丢弃的文件将包含我想上传的所有记录

b)运行第二个CTL命令以拾取DSC文件作为输入,不要跳过记录,并且不指定when子句n要么

LOAD DATA 
INFILE 'C:\temp\users.dsc' 
BADFILE 'C:\temp\users.bad' 
DISCARDFILE 'C:\temp\users-run2.dsc' 
TRUNCATE 
INTO TABLE "alawakaba"."users" 
FIELDS TERMINATED BY '|' 
OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
(
ID, 
FIRSTNAME, 
LASTNAME, 
FUNCTION, 
DEPARTMENT, 
COSTCENTER, 
HIREDATE, 
Field8 FILLER, 
TERMINATIONDATE, 
LOCCODE 
) 

不是最好的或最快的一个,但它的确有窍门。

不能相信这样一个简单的子句在SQLLDR中从一开始就不起作用。 不管怎样,希望它有助于

ķ