IBM DB2 z/OS下查询最后一列是BATCH_ID的所有表的实现方法
适配IBM DB2 z/OS的SQL查询解决方案
核心逻辑说明
DB2 z/OS平台的系统字典表存放在SYSIBM schema下,其中SYSIBM.SYSCOLUMNS表的COLNO字段用于标识表中列的排列顺序,序号从1开始递增,每个表的最后一列对应该表所有列的最大COLNO值,通过匹配该规则即可实现筛选需求。
可直接运行的SQL语句
SELECT c.TBCREATOR AS schema_name, c.TBNAME AS table_name FROM SYSIBM.SYSCOLUMNS c INNER JOIN SYSIBM.SYSTABLES t ON t.CREATOR = c.TBCREATOR AND t.NAME = c.TBNAME WHERE c.NAME = 'BATCH_ID' AND c.TBCREATOR = 'WRIT5P1' AND c.TBNAME NOT LIKE 'OLD%' AND t.TYPE = 'T' AND c.COLNO = ( SELECT MAX(COLNO) FROM SYSIBM.SYSCOLUMNS WHERE TBCREATOR = c.TBCREATOR AND TBNAME = c.TBNAME ) ORDER BY schema_name, table_name;
调整说明
- 替换了原代码中仅适用于DB2 LUW(分布式版本)的
SYSCAT系列系统表,改为z/OS版本支持的SYSIBM系统表 - 新增子查询逻辑匹配
BATCH_ID的列序号等于对应表的最大列序号,精准实现「最后一列是BATCH_ID」的筛选要求 - 完全保留了原需求中的schema过滤、OLD开头表排除、仅查询普通用户表的业务规则
内容的提问来源于stack exchange,提问作者Christopher Fowler
相关产品推荐
相关产品推荐

