代码之家  ›  专栏  ›  技术社区  ›  SwapnaSubham Das

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

  •  0
  • SwapnaSubham Das  · 技术社区  · 6 年前

    我有一个以下格式的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在when子句中不允许使用“or”运算符。我试过使用“in”子句,但得到了相同类型的错误。

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   GolezTrol    3 年前

    SQL*加载程序不允许 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
    )