SQLLDR控制文件中的多个case语句

时间:2015-03-26 16:33:15

标签: oracle11g etl sql-loader case-statement

我正在使用控制文件将数据加载到运行在Windows 7计算机上的Oracle 11g中。我在使用以下case语句加载数据时遇到问题,我尝试了不同的方法,无法成功。有什么建议吗? (在日志文件中,错误是:

记录1:拒绝 - 表员工出错,列blah。 ORA-00905:缺少关键字

记录2:拒绝 - 表员工出错,列blah。 ORA-00905:缺少关键字,.....等等。

和守则是:

  Options (skip=1)

  load data
  APPEND INTO TABLE employee
  fields terminated by "\t"
  TRAILING NULLCOLS
  (
  a,
  b,
  c,
  d,
  blah "CASE WHEN :b='k' THEN 'LPAD(:blah,6,'0')'
             WHEN :b='s' AND :d='p' THEN 'LPAD(:blah,11,'0')'
             WHEN :b='s' AND :d='pr' THEN 'LPAD(:blah,8,'0')'
     END",
  g,
  h, 
  i
  )

1 个答案:

答案 0 :(得分:0)

您已使用单引号包围LPAD来电,这就是为什么它们不起作用的原因。尝试将表达式更改为

blah "CASE WHEN :b='k' THEN LPAD(:blah,6,'0') 
         WHEN :b='s' AND :d='p' THEN LPAD(:blah,11,'0')
         WHEN :b='s' AND :d='pr' THEN LPAD(:blah,8,'0')
     END",
...