Использование файлов
Следующая команда db2 создает сценарий экспорта:
export to exp.sql of del modified by nochardel
select
x'0a'||'export to file_header of del modified by nochardel VALUES '''||columns||''''
||x'0a'||'export to file_data of del messages messages.msg select '||columns||' from '||tabname_full
||x'0a'||'! cat file_header file_data > '||tabname_full||'.csv'
from
(
select rtrim(c.tabschema)||'.'||c.tabname as tabname_full, listagg(c.colname, ', ') as columns
from syscat.tables t
join syscat.columns c on c.tabschema=t.tabschema and c.tabname=t.tabname
where t.tabschema='SYSIBM' and t.type='T'
group by c.tabschema, c.tabname
--fetch first 10 row only
)
;
Лучше поместить указанную выше команду в какой-нибудь файл, например gen_exp.sql
, и запустить ее для создания сценария экспорта:
db2 -tf gen_exp.sql
Сценарий экспорта exp.sql
состоит из 3 команд для каждой таблицы:
* db2 export
команда для получения списка столбцов через запятую
* db2 export
команда для получения данных таблицы
* команда конкатенации, чтобы собрать оба вышеприведенных вывода в один файл
Вы запускаете этот скрипт следующим образом:
db2 -vf exp.sql -z exp.sql.log
Использование трубы
gen_exp_sh.sql:
export to exp.sh of del modified by nochardel
select
x'0a'||'echo "'||columns||'" > '||filename
||x'0a'||'db2 "export to pipe_data of del messages messages.msg select '||columns||' from '||tabname_full||'" >/dev/null 2>&1 </dev/null &'
||x'0a'||'cat pipe_data >> '||filename
from
(
select
rtrim(c.tabschema)||'.'||c.tabname as tabname_full
, rtrim(c.tabschema)||'.'||c.tabname||'.csv' as filename
, listagg(c.colname, ', ') as columns
from syscat.tables t
join syscat.columns c on c.tabschema=t.tabschema and c.tabname=t.tabname
where t.tabschema='SYSIBM' and t.type='T'
group by c.tabschema, c.tabname
--fetch first 10 row only
)
;
Запустите его следующим образом:
db2 -tf gen_exp_sh.sql
Сценарий экспорта exp.sh
состоит из 3 команд для каждой таблицы:
* echo команда для записи списка столбцов через запятую в файл
* Команда экспорта db2 для получения данных таблицы в канал (запущена в фоновом режиме)
* простая cat
команда для чтения из канала и добавления данных в тот же файл со списком столбцов
Использование:
Сначала вы должны создать канал и исходный код (dot space script
нотация - это важно), а затем скрипт экспорта:
mkfifo pipe_data
db2 connect to mydb ...
. ./exp.sh
rm -f pipe_data