Если вы определите свой столбец как char(8)
, тогда он всегда будет дополнен пробелами, независимо от того, есть ли в файле значение пробелов или нет: если я сделаю файл смешанным:
create table Arranger_check(
matriid char2(8))
...
select matriid, length(matriid), dump(matriid) as dumped
from Arranger_check;
MATRIID LENGTH(MATRIID) DUMPED
-------- --------------- ----------------------------------------
I001234 8 Typ=96 Len=8: 73,48,48,49,50,51,52,32
I012344 8 Typ=96 Len=8: 73,48,49,50,51,52,52,32
I000234 8 Typ=96 Len=8: 73,48,48,48,50,51,52,32
При varchar2
значение столбца будет иметь пробелы только в том случае, если в файле есть конечные пробелы, поэтому для одного и того же файла со смесью вы получите переменную длину в таблице:
create table Arranger_check(
matriid varchar2(8))
...
select matriid, length(matriid), dump(matriid) as dumped
from Arranger_check;
MATRIID LENGTH(MATRIID) DUMPED
-------- --------------- ----------------------------------------
I001234 8 Typ=1 Len=8: 73,48,48,49,50,51,52,32
I012344 7 Typ=1 Len=7: 73,48,49,50,51,52,52
I000234 7 Typ=1 Len=7: 73,48,48,48,50,51,52
Если вы хотите, чтобы значения столбцане иметь конечных пробелов, даже если значения файлов есть, их нужно обрезать, если они существуют:
create table Arranger_check(
matriid varchar2(8))
organization external (
type oracle_loader default directory ext_tab_data access parameters
(
records delimited by newline
fields
(
matriid char(8) rtrim
)
)
location('file.csv')) reject limit unlimited;
Затем с тем же файлом со смесью значений с пробелами и без них:
select matriid, length(matriid), dump(matriid) as dumped
from Arranger_check;
MATRIID LENGTH(MATRIID) DUMPED
-------- --------------- ----------------------------------------
I001234 7 Typ=1 Len=7: 73,48,48,49,50,51,52
I012344 7 Typ=1 Len=7: 73,48,49,50,51,52,52
I000234 7 Typ=1 Len=7: 73,48,48,48,50,51,52
Обратите внимание, что rtrim
не будет иметь никакого реального эффекта, если вы будете придерживаться char(8)
, так как именно этот тип данных вызывает повторное заполнение всех значений пробелами до полного размера столбца.Вам нужно использовать varchar2(8)
.