Можно ли использовать имя раздела таблицы базы данных как часть предложения 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>)

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

Другие вопросы по тегам