2013-10-24 37 views
1

我將包含約250億行數據的數據集加載到我們的數據庫之一中。 有了這麼多的數據我不想加載不需要的行,所以我給加載添加了一個WHERE子句。 數據由XYZ值的行組成,當Z = -9999時表示該點未定義並且可以省略。在SQLLDR中使用WHEN子句

添加其中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 
    ) 
) 
) 
+0

檢查出來的'code'按鈕在問題編輯器中。 :) –

+0

我做到了,按照指令前綴4個空格,但它只是忽略它 – kenneedham

+0

您還必須在代碼段之前有一個空行。你可以標記文本,然後點擊代碼按鈕,然後它會爲你完成。 –

回答

0

作爲documented,字面必須是一個字符串,十六進制碼,或空白。

錯誤消息實際上告訴你:

期待引號的字符串或十六進制標識符,發現 「 - 」

用途:

WHEN Z <> '-9999' 
+0

這是我第一次嘗試。我得到一個不同的錯誤,那麼SQL * Loader-403:引用列Z不在表LIDAR_DSM_XYZ_1M中。 – kenneedham

+0

然後它聽起來像你的問題是「如何引用一列」。嘗試位置規格:WHEN(3)<>'-9999' –

+1

不幸的是,位置規格指的是輸入行中的字符位置,而不是字段。然而,它確實使得一種非常糟糕的解決方法成爲可能,因爲記錄只能以兩種格式之一出現,我可以將文字31和33看作是否是' - '。不理想,但從250億行的表中刪除記錄需要永遠。 – kenneedham