1

それぞれ約 250 億行を含むデータセットをデータベースの 1 つに読み込んでいます。それほど多くのデータがあるので、不要な行をロードしたくないので、ロードに 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
   )
  )
 )
4

1 に答える 1

1

文書化されているように、リテラルは文字列、16 進コード、または空白でなければなりません。

エラーメッセージは、実際には次のことを示しています。

引用符で囲まれた文字列または 16 進識別子が必要ですが、「-」が見つかりました

使用する:

WHEN Z <> '-9999'
于 2013-10-24T10:59:18.000 に答える