我有一个格式低于以下的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'
请帮助我。如何在控制文件中使用多个条件
答案 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
)