Можно ли использовать имя раздела таблицы базы данных как часть предложения WHERE для оператора IBM DB2 9.7 SELECT?
Я пытаюсь выбрать все данные из одного и того же конкретного табличного раздела для более 100 таблиц с помощью утилиты DB2 EXPORT. Имя раздела является постоянным во всех моих многораздельных таблицах, что делает этот метод более выгодным, чем использование некоторых других возможных методов.
Я не могу отсоединить разделы, так как они находятся в производственной среде.
Чтобы написать сценарий для полуавтоматики, мне нужно иметь возможность выполнить запрос:
SELECT * FROM MYTABLE
WHERE PARTITION_NAME = MYPARTITION;
Я не могу найти правильный синтаксис для использования этого типа логики в моем операторе SELECT, передаваемом утилите EXPORT.
Заранее спасибо. Джон
1 ответ
Вы можете сделать что-то вроде этого, сначала посмотрев номер раздела:
SELECT SEQNO
FROM SYSCAT.DATAPARTITIONS
WHERE TABNAME = 'YOURTABLE' AND DATAPARTITIONNAME = 'WHATEVER'
затем с помощью SEQNO
значение в запросе:
SELECT * FROM MYTABLE
WHERE DATAPARTITIONNUM(anycolumn) = <SEQNO value>
Редактировать:
Поскольку не имеет значения, на какой столбец вы ссылаетесь DATAPARTITIONNUM()
и поскольку каждая таблица гарантированно имеет хотя бы один столбец, вы можете автоматически генерировать запросы, присоединившись SYSCAT.DATAPARTITIONS
а также SYSCAT.COLUMNS
:
select
'select * from', p.tabname,
'where datapartitionnum(', colname, ') = ', seqno
from syscat.datapartitions p
inner join syscat.columns c
on p.tabschema = c.tabschema and p.tabname = c.tabname
where colno = 1
and datapartitionname = '<your partition name>'
and p.tabname in (<your table list>)
Однако включение зависимости от метаданных базы данных в ваше приложение, на мой взгляд, не очень надежно. Вы можете просто указать соответствующий диапазон ключей разделения для извлечения данных, что будет максимально эффективно.