IBM DB2 - не выгружайте строки DECIMAL, длина которых превышает определенную - PullRequest
0 голосов
/ 15 января 2020

У меня есть таблица IBM DB2, из которой я хочу разгрузить данные, чтобы я мог загрузить их в другую таблицу DB2.

Обе таблицы имеют одинаковые столбцы (и типы), за исключением одного десятичного поля.

Это DECIMAL (6) в исходной таблице и DECIMAL (5) в целевой таблице.

В исходной таблице много записей, которые используют до 5 цифр в поле DECIMAL. и только некоторые из них используют все 6 из них.

Что я собираюсь сделать, это только скопировать записи, которые go до 5 цифр в исходной таблице, и отбросить все остальные.

Могу ли я сделать это только с помощью оператора UNLOAD? Поэтому, имея опцию, которая сообщает системе «выгрузить столбец id» как DECIMAL (5) (хотя в самой таблице это DECIMAL (6)), и если запись в этом столбце использует все 6 цифр (> 99999), не выгружать та строка ".

Кроме того, как бы вы справились с делом, если бы все было наоборот? Например, выгрузите DECIMAL (5) из источника и ЗАГРУЗИТЕ как DECIMAL (6) в месте назначения

Почему я это делаю? Поскольку таблица назначения является более старой версией таблицы, используемой более старыми версиями приложений. Мы откажемся от поддержки через 6 месяцев, но до тех пор нам нужно обновить sh наборов данных в нем.

С UNLOAD и LOAD я говорю об утилитах UNLOAD и LOAD для z / OS, описанных (?) под например https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/ugref/src/tpc/db2z_utl_unload.html

1 Ответ

0 голосов
/ 16 января 2020

Не зная вашей исходной среды, для Db2 Linux, Unix, Windows оператор экспорта используется с оператором выбора. Таким образом, вы будете делать все, что логично c, имеет смысл превратить DECIMAL (6) в DECIMAL (5) - в том числе пропускать строки, для которых нужны все 6 цифр, так как нет способа сделать их подходящими для распределения 5 di git , В настоящее время предпочтительным методом в этой среде является использование внешних таблиц, но они работают аналогичным образом.

export to 'myfile.csv' OF del select col1, dec_col6 from thetable where dec_col6 < 100000

ИЛИ

create external table 'myfile.csv' using (DELIMITER ',') as select col1, case when dec_col6 > 99999 then 99999 else dec_col6 end from thetable

Внешние таблицы
Экспорт

Поскольку вы использовали слово "выгрузить", я полагаю, вы используете такой инструмент, как High Performance Unload или вы на другой вкус Db2.

...