数据库表分区名是否可以用作IBM DB2 9.7 SELECT语句WHERE子句的一部分?

c9qzyr3d  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(185)

我尝试使用DB2 EXPORT实用程序从100多个表的同一个特定表分区中选择所有数据,分区名在所有分区表中是不变的,这使得这种方法比使用其他方法更有优势。
我无法分离分区,因为它们处于生产环境中。
为了编写半自动化脚本,我需要能够运行查询:

  1. SELECT * FROM MYTABLE
  2. WHERE PARTITION_NAME = MYPARTITION;

在传递给EXPORT实用程序的SELECT语句中,我找不到使用这种类型逻辑的正确语法。

nbewdwxp

nbewdwxp1#

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

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

然后在查询中使用SEQNO值:

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

编辑

由于在DATAPARTITIONNUM()中引用哪个列并不重要,而且每个表都保证至少有一列,因此可以通过联接SYSCAT.DATAPARTITIONSSYSCAT.COLUMNS来自动生成查询:

  1. select
  2. 'select * from', p.tabname,
  3. 'where datapartitionnum(', colname, ') = ', seqno
  4. from syscat.datapartitions p
  5. inner join syscat.columns c
  6. on p.tabschema = c.tabschema and p.tabname = c.tabname
  7. where colno = 1
  8. and datapartitionname = '<your partition name>'
  9. and p.tabname in (<your table list>)

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

展开查看全部

相关问题