SQLLDR和CTL文件
要导入CSV文件。
我想在我的CTL文件中指定只在我的CSV文件中的某个列中有空值时才插入到我的表中。 E.G我只想上传不终止日期的用户记录。
我尝试了各种选项
它只在我使用时才有效 - 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只是我不需要的一个,所以我正在跳过它)
了解你的见解。
答案 0 :(得分:1)
它应该与以下条款一起使用:
WHEN TERMINATIONDATE = BLANKS
答案 1 :(得分:0)
a)以上述CTL运行。
改变
当TERMINATIONDATE =''时
到
当TERMINATIONDATE!=''
丢弃的记录将被注入 DISCARDFILE'C:\ temp \ users.dsc' 现在我丢弃的文件将包含我想上传的所有记录
b)运行第二个CTL命令以取消DSC文件作为输入,不再跳过记录并且不指定when子句
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开始就不起作用。 无论如何,希望它有所帮助
ķ