在SQLLDR中使用WHEN子句

时间:2013-10-24 10:16:51

标签: oracle sql-loader

我正在将包含大约250亿行的数据集加载到我们的一个数据库中。 有了这么多数据,我不想加载不需要的行,所以我在加载中添加了一个WHERE子句。 数据由XYZ值行组成,当Z = -9999时,表示该点未定义且可以省略。

添加 WHERE Z<> -9999 给出了这个错误...

SQL*Loader-350: Syntax error at line 5.
Expecting quoted string or hex identifier, found "-".
  WHEN Z <> -9999

没有WHERE子句就可以正常运行

数据:

44790.301538192,54665.413037326,-9999
44791.301474866,54665.387827518,-9999
44792.30141154,54665.36261771,-9999
44793.301348214,54665.337407902,-9999

目标表:

CREATE TABLE LIDAR_DSM_XYZ_1M
(
  PK_ID     INTEGER,
  TILE      VARCHAR2(30 BYTE),
  GEOMETRY  MDSYS.SDO_GEOMETRY
)

控制文件:

OPTIONS(DIRECT=TRUE)
UNRECOVERABLE LOAD DATA
 INFILE 'su9498_dsm_1m.xyz'
 APPEND
 INTO TABLE LIDAR_DSM_XYZ_1M
  WHEN Z <> -9999
 FIELDS TERMINATED BY ','
 TRAILING NULLCOLS (
  TILE CONSTANT 'su9498_dsm_1m',
  GEOMETRY COLUMN OBJECT 
  (SDO_GTYPE       CONSTANT 3001, 
   SDO_POINT COLUMN OBJECT
   (X            FLOAT EXTERNAL, 
    Y            FLOAT EXTERNAL,
    Z            FLOAT EXTERNAL
   )
  )
 )

1 个答案:

答案 0 :(得分:0)

作为documented,文字必须是字符串,十六进制代码或BLANKS。

错误消息实际上告诉您:

  

期望引用的字符串或十六进制标识符,找到“ - ”

使用:

WHEN Z <> '-9999'