Управление данными и загрузка через SQLLDR
Может кто-нибудь, пожалуйста, помогите мне. Мне нужно загрузить данные из .dat
файл в таблицу.
.DAT
файл имеет Col1, Col2, Col3
Стол есть Col1, Col4
Что я хочу это
Table.Col4 = DAT File Col2*Col3
Как я могу добиться этого через SQLLDR и файл CTL. Примечание. Столбцы в файле DAT могут иметь переменную длину.
eg DAT File:
110000002 , 1 , 7500
110000003 , 1 , 7500
110000008 , 1 , 7500
110000028 , 1 , 7500
110000054 , 1 , 7500
110000055 , 1 , 7500
110000082 , 1 , 7500
110000095 , 1 , 7500
3 ответа
Я думаю, вы могли бы попробовать этот файл CTL:
load data
infile 'my_file.dat'
truncate
into table my_table
fields terminated by ','
(
COL1,
COL2 boundfiller,
COL3 boundfiller,
COL4 expression ":COL2 * :COL3"
)
Привет Вот код, который вы должны поместить в контрольный файл. он будет работать, так как col1 получит значение от первой строки до ',' затем значение второго и третьего столбца будет сохранено в переменную INPUTCOL2 и INPUTCOL3, и в конце мы объединяем эти два значения в col4, который является столбцом вашей таблицы с умножением.
LOAD DATA
INFILE 'mydata.dat'
INSERT
INTO TABLE MY_table
fields terminated by ','
trailing nullcols
(
COL1,
INPUTCOL2 BOUNDFILLER,
INPUTCOL3 BOUNDFILLER,
COL4 ":INPUTCOL2*:INPUTCOL3"
)
Использование функций в управляющем файле SQL*Loader
При использовании функций PLSQL в SQL*Loader используйте цитаты.
Вот столбец номер четыре из контрольного файла:
COL4 ":COL2*:COL3"
Чтобы увидеть это, давайте создадим тестовую таблицу MY_TABLE.
DDL для нашей тестовой таблицы, MY_TABLE.
CREATE TABLE SCOTT.MY_TABLE ( "COL1" NUMBER(9,0) NOT NULL ENABLE, "COL2" NUMBER(6,0), "COL3" NUMBER(6,0), "COL4" NUMBER(8,0) );
создать контрольный файл теста с этим подходом. Я включил ваш пример данных:
LOAD DATA
INFILE *
BADFILE 'MY_TABLE.bad'
DISCARDFILE 'MY_TABLE.dsc'
INSERT
INTO TABLE MY_TABLE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' ' TRAILING NULLCOLS
(
COL1,
COL2,
COL3,
COL4 ":COL2*:COL3"
)
BEGINDATA
110000002 , 1 , 7500
110000003 , 2 , 7500
110000008 , 1 , 7500
110000028 , 3 , 7500
110000054 , 1 , 7500
110000055 , 1 , 7500
110000082 , 4 , 7500
110000095 , 5 , 7500
Вызвать команду sqlldr, ссылающуюся на управляющий файл.
результаты в буфере:
SCOTT@tst>SELECT 2 * 3 FROM 4 my_table;
COL1 COL2 COL3 COL4 ---------- ---------- ---------- ---------- 110000002 1 7500 7500 110000003 2 7500 15000 110000008 1 7500 7500 110000028 3 7500 22500 110000054 1 7500 7500 110000055 1 7500 7500 110000082 4 7500 30000 110000095 5 7500 37500 8 rows selected.