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
答
哦,我明白了.. 这不是最终的解决方案,并具有一些开销,但我可以在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中从一开始就不起作用。 不管怎样,希望它有助于
ķ
没有做:(它只是忽略了所有他们的把戏。不知何故,SQLLDR无法使用带空格的时间 – KriZ 2011-05-26 07:06:48