数据库 table 分区名称可以用作 IBM DB2 9.7 SELECT 语句的 WHERE 子句的一部分吗?

Can a database table partition name be used as a part of WHERE clause for IBM DB2 9.7 SELECT statement?

我正在尝试使用 DB2 EXPORT 实用程序 select 将所有数据从同一特定 table 分区中取出 100 多个 table 秒。分区名称在我所有的分区 table 中都是不变的,这使得这种方法比使用其他一些可能的方法更有优势。

我无法分离分区,因为它们在生产环境中。

为了编写半自动化脚本,我需要能够运行查询:

SELECT * FROM MYTABLE 
WHERE PARTITION_NAME = MYPARTITION;

我无法在传递给 EXPORT 实用程序的 SELECT 语句中找到使用此类逻辑的正确语法。

提前致谢。 约翰

您可以通过首先查找分区 number 来执行类似的操作:

SELECT SEQNO 
FROM SYSCAT.DATAPARTITIONS
WHERE TABNAME = 'YOURTABLE' AND DATAPARTITIONNAME = 'WHATEVER'

然后在查询中使用 SEQNO 值:

SELECT * FROM MYTABLE 
WHERE DATAPARTITIONNUM(anycolumn) = <SEQNO value>

编辑:

因为在DATAPARTITIONNUM()中引用什么列并不重要,而且每个table保证至少有一个列,你可以通过加入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>)

但是,在我看来,将对数据库元数据的依赖构建到您的应用程序中并不是很可靠。您可以简单地指定适当的分区键范围来提取数据,这将同样高效。