问题描述
- Data1|data2|data3....
- Data4|data5|data6....
- Ctr|1|2
- Lst|1|30
- Lst|1|40
- Lst|1|50
- Data7|data8....
- Ctr|2|3
- Lst|2|60
- Lst|2|70
我有一个表控件(data_type varchar, id_control varchar, Type_liste varchar, id_subcontrol varchar)
我正在使用sql loader填充表,我期望的结果是:
- data_type | Id_control|Type_liste| Id_subcontrol
- Ctrl | 1 | NULL | 2
- Lst | 1 | 30 | NULL
- Lst | 1 | 40 | NULL
- Lst | 1 | 50 | NULL
- Ctr | 2 | NULL | 3
- Lst | 2 | 60 | NULL
- Lst | 2 | 70 | NULL
我已经尝试过,但是第二部分返回0行已加载
LOAD DATA
CHaraCTERSET UTF8
TruncATE
INTO TABLE controle
WHEN (1:4) = 'Ctrl|'
FIELDS TERMINATED BY "|"
TRAILING NULLCOLS
(
Data_type CHAR,Id_control CHAR,Id_subcontrol CHAR
)
INTO TABLE controle
WHEN (1:3) = 'Lst'
FIELDS TERMINATED BY "|"
TRAILING NULLCOLS
(
Data_type CHAR,Id_control CHAR,type_list CHAR
)
有什么想法吗? 预先感谢。
解决方法
使用多个INTO TABLE子句的关键点是字段 当新的INTO TABLE子句从停止处继续扫描 已处理。本节的其余部分详细介绍了以下重要方法 利用这种行为。它还描述了替代的使用方式 固定字段位置或POSITION参数。
因此,在处理Lst条件时,它将继续在当前行中查找列。
您可以通过使用position
定义第一个字段来将其重置为行的开头来重置此行:
LOAD DATA
INFILE *
TRUNCATE
INTO TABLE controle
WHEN Data_type = 'Ctr'
FIELDS TERMINATED BY "|"
TRAILING NULLCOLS
(
Data_type CHAR,Id_control CHAR,Id_subcontrol CHAR
)
INTO TABLE controle
WHEN Data_type = 'Lst'
FIELDS TERMINATED BY "|"
TRAILING NULLCOLS
(
Data_type POSITION(1:3) CHAR,Id_control CHAR,type_list CHAR
)
BEGINDATA
Data1|data2|data3
Data4|data5|data6
Ctr|1|2
Lst|1|30
Lst|1|40
Lst|1|50
Data7|data8|data9
Ctr|2|3
Lst|2|60
Lst|2|70