Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2 Load binary / 4 сообщений из 4, страница 1 из 1
24.09.2014, 14:07
    #38756185
sl888
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DB2 Load binary
Всем привет! Знатоки помогите!

В DB2 ничего не смыслю. Пишу утилиту для выгрузки данных в csv формат, который затем будет загружаться в DB2 c помощью некой утилиты DB Load.

При тестировании случился затык с загрузкой в поле типа BINARY(32). Данные для вставки в это поле в файле лежат в виде:
"BE13C5A7A7DFA935F59BBD4CABA8864701CAC362000000000000000000000000" (64 символа)
При загрузке получаем ошибку - поле слишком длинное.

-DBK1 266 15:00:43.28 DSNURCON - INPUT FIELD 'HASH',
INVALID FOR 'TST.T1',
ERROR CODE '12 - INPUT VARCHAR FIELD IS TOO LONG'


В каком виде нужно подсунуть данные чтобы загрузить в BINARY(32)?
...
Рейтинг: 0 / 0
25.09.2014, 08:10
    #38756955
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DB2 Load binary
sl888,

Казалось бы, чего проще взять да проверить ;)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
$ db2 "create table test(val character(13) for bit data)"
DB20000I  The SQL command completed successfully.
$ db2 "insert into test values generate_unique()"
DB20000I  The SQL command completed successfully.
$ db2 "select * from test"

VAL
-----------------------------
x'20140924223135677839000000'

  1 record(s) selected.

$ db2 "export to test.csv of del select * from test"
SQL3104N  The Export utility is beginning to export data to file "test.csv".

SQL3105N  The Export utility has finished exporting "1" rows.


Number of rows exported: 1

$ db2 "import from test.csv of del insert into test"
SQL3109N  The utility is beginning to load data from file "test.csv".

SQL3110N  The utility has completed processing.  "1" rows were read from the
input file.

SQL3221W  ...Begin COMMIT WORK. Input Record Count = "1".

SQL3222W  ...COMMIT of any database changes was successful.

SQL3149N  "1" rows were processed from the input file.  "1" rows were
successfully inserted into the table.  "0" rows were rejected.


Number of rows read         = 1
Number of rows skipped      = 0
Number of rows inserted     = 1
Number of rows updated      = 0
Number of rows rejected     = 0
Number of rows committed    = 1

$ db2 "select * from test"

VAL
-----------------------------
x'20140924223135677839000000'
x'20140924223135677839000000'

  2 record(s) selected.

$ cat test.csv
"       $""15gx9"
$ hexdump -C test.csv
00000000  22 20 14 09 24 22 22 31  35 67 78 39 00 00 00 22  |" ..$""15gx9..."|
00000010  0a                                                |.|
00000011
$ rm test.csv
$ db2 "drop table test"
DB20000I  The SQL command completed successfully.

Т.е. данные в .csv файле должны быть прямо в бинарном виде с дублированием "character string delimiter" символа (по умолчанию - "), если при load'е не указана опция NODOUBLEDEL.

Действительно, описание DEL формата не предусматривает какой-либо специальной формы записи для for bit data полей:
http://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.dm.doc/doc/r0004647.html

Нужно также не забыть добавить в LOAD'е modified by DELPRIORITYCHAR опцию, чтобы он внутри квотированных строк воспринимал row delimiters (символы новой строки) как часть бинарных данных.


Варианты:
а) грузить строку из .csv в аналогичную таблицу с увеличеным размером текстовых полей, затем переливать данные, осуществляя преобразование из HEX.
б) делать не LOAD, а импорт (если можно от него отказаться), и before insert триггером конвертировать HEX -> character for bit data.
...
Рейтинг: 0 / 0
25.09.2014, 13:42
    #38757464
sl888
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DB2 Load binary
CawaSPb, спасибо большое!

DELPRIORITYCHAR зависит от версии как то? у нас DB2 for z/OS v10 и вроде, со слов админа, такого там нет. Хотя мне кажется, что по умолчанию так и работает, потому как данные стали загружаться, после того как я стал их писать в бинарном виде.
...
Рейтинг: 0 / 0
25.09.2014, 15:48
    #38757711
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DB2 Load binary
sl888у нас DB2 for z/OS v10 и вроде, со слов админа, такого там нет.

Упс. DB2 for z/OS - это совсем другая DB2, хотя какое-то стремление к стандартизации фич и существует.
Там надо смотреть доку по z/OS.

DEL формат сам по себе должен бы быть единым, а вот с опциями...
Можно просто проверить, загрузив строку, содержащую в текстовом поле символы новой строки.

В DB2 for LUW без DELPRIORITYCHAR опции строка разобъётся на две входящие.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2 Load binary / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]