Мне потребуется помощь в вставке данных из CSV-файла в таблицу CUSTOMER с использованием сценария Shell. Можно ли получить данные CSV с помощью запятой вместо фиксированной позиции данных? Например, данные для моего Remarks не имеют фиксированной позиции, т.е. могут содержать 10 символов или 15 символов, следовательно переменная меняется.
#!/bin/bash
PASSFILE=/credentials/systemcredential.properties
USERID=$(cat $PASSFILE | grep UserID | cut -f2 -d=)
PASSWORD=$(cat $PASSFILE | grep Pwd | cut -f2 -d=)
# connect to database
source /opt/db2home/db2profile
db2 connect to DBRPTGU user $USERID using $PASSWORD
#--------------------------------------------------#
# TABLE: CUSTOMER
#--------------------------------------------------#
#db2 "select count(*) from udbcuser.CUSTOMER"
db2 "load from /batchload/data/CUSTOMER.csv of asc
method L(1 7, 9 23, 25 39, 41 47, 49 68)
insert_update into udbcuser.CUSTOMER(CUSTOMER_ID,CUSTOMER_NAME,ITEM_PURCHASED,AMOUNT_PURCHASED,REMARKS)"
Пример данных по запросу:
9000001,Майкл Тан,Кошелек,$30,Покупатель в первый раз
9000002, Салли Гомес, куртка, 90 долларов,
9000003,Чэн Нин,Ботинки,$80,Член
9000004, Ричард Чин, солнцезащитные очки, 30 долларов, участник
Спасибо!
Вы можете использовать файлы CSV (load from ... OF DEL modified by .... insert into...), но вы должны быть уверены, что разделитель (например, запятая по умолчанию) не появляется внутри значений данных. Если разделитель столбца может отображаться как данные, либо выберите другой разделитель (modified by coldel...), либо продолжайте использовать файлы с фиксированной шириной, если файлы данных действительно содержат значения столбца с фиксированной шириной.
Пожалуйста, предоставьте образец ваших данных





Вот пример скрипта.
echo '9000001,Michael Tan,Wallet,$30,First time customer' > dat.csv
echo '9000002,Sally Gomez,Jacket,$90,' >> dat.csv
echo '9000003,Cheng Ning,Boots,$80,Member' >> dat.csv
echo '9000004,Richard Chin,Sunglasses,$30,Member' >> dat.csv
db2 -v drop db db1
db2 -v create db db1
db2 -v connect to db1
db2 -v "create table db2inst1.customer (num int, name char (30), item char (20), price char(10), remark char(20))"
db2 -v "load from dat.csv of del insert into db2inst1.customer"
db2 -v "select * from db2inst1.customer"
Когда вы запускаете, последний select * from db2inst1.customer возвращается как:
NUM NAME ITEM PRICE REMARK
----------- ------------------------------ -------------------- ---------- --------------------
9000001 Michael Tan Wallet $30 First time customer
9000002 Sally Gomez Jacket $90 -
9000003 Cheng Ning Boots $80 Member
9000004 Richard Chin Sunglasses $30 Member
4 record(s) selected.
Существует множество вариантов команды загрузки, и вот страница руководства V11.5 для справки:
ЗАГРУЗИТЬ команду
https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0008305.html
Надеюсь это поможет.
Почему вы используете «ASC», а не «DEL» в качестве типа файла?