Как использовать несколько условий в загрузчике SQL? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть один CSV-файл с форматом ниже. Первый столбец - это идентификатор. Второй столбец - это имя, а третий столбец - это отдел. В этом файле более 700 тысяч строк. Я пытался переместить только детали отделов 10, 90, 30 и 70 в таблицу оракулов с помощью SQL Loader.

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)

но оракул не разрешил использовать оператор "или" в предложении when. Я попытался с предложением "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 Ответ

0 голосов
/ 01 мая 2018

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
)
...