如何在sql loader中使用多个条件?

时间:2018-05-01 06:02:00

标签: oracle sql-loader

我有一个格式低于以下的csv文件。第一列是id第二列是name,第三列是dept。此文件中有超过700k行。我试图通过使用SQL Loader在oracle表中仅移动部门10,90,30和70个细节。

100,AAA,10
101,BBB,10
102,CCC,20
103,DDD,30
104,EEE,40
105,FFF,50
106,GGG,70
107,HHH,60
108,III,20
109,JJJ,80
110,KKK,90
111,LLL,90
112,MMM,50
113,NNN,80
114,OOO,10

我的表格格式为: -

create table DEPT_LOADER(
    ID NUMBER
    ,NAME VARCHAR2(100)
    ,DEPT number
);

以下是控制文件

    load data
    infile 'F:\SQL_Loader\dept.csv'
    badfile 'F:\SQL_Loader\dept.bad'
    discardfile 'F:\SQL_Loader\dept.dsc'
    insert 
    into table DEPT_LOADER
    when dept = '10' or  dept = '90' or dept = '30' or  dept = '70'
    fields terminated by ','
    (id,name,dept)

但是oracle并没有允许"或" operator in when子句。我试过"在"子句和获得相同类型的错误。

    SQL*Loader-350: Syntax error at line 7.
    Expecting "(", found "or".
    when dept = '10' or  dept = '90' or dept = '30' or  dept = '70'

请帮助我。如何在控制文件中使用多个条件

1 个答案:

答案 0 :(得分:1)

SQL * Loader不允许OR子句中的WHEN运算符。您应该使用多个INSERT INTO DEPT_LOADER

您的控制文件应该是;

LOAD DATA
INFILE 'F:\SQL_Loader\dept.csv'
BADFILE 'F:\SQL_Loader\dept.bad'
DISCARDFILE 'F:\SQL_Loader\dept.dsc'
INSERT 
INTO TABLE DEPT_LOADER WHEN DEPT = '10'
FIELDS TERMINATED BY ','
(
ID POSITION(1),
NAME,
DEPT
)
INTO TABLE DEPT_LOADER WHEN DEPT = '90'
FIELDS TERMINATED BY ','
(
ID POSITION(1),
NAME,
DEPT
)
INTO TABLE DEPT_LOADER WHEN DEPT = ’30'
FIELDS TERMINATED BY ','
(
ID POSITION(1),
NAME,
DEPT
)
INTO TABLE DEPT_LOADER WHEN DEPT = ’70'
FIELDS TERMINATED BY ','
(
ID POSITION(1),
NAME,
DEPT
)