我有一个表列表,我想找出db2 Z / OS中缺少的表。
我可以考虑使用带有硬编码值(UNION ALL)的CTE,然后在目录表上执行LEFT OUTER JOIN。
不确定如何在CTE中对值进行硬编码。还有其他更快的查询表存在的方法,因为我有大量的表需要检查。
谢谢。
答案 0 :(得分:0)
将巨大的列表加载到一些中间表中,比如使用(CREATOR VARCHAR(128),NAME VARCHAR(128))字段。 至于硬编码值。试试这个:
select v.*
from (
select 'SYSIBM', 'SYSTABLES' from sysibm.sysdummy1
union all
select 'SYSIBM', 'SYSCOLUMNSS' from sysibm.sysdummy1
-- union all
--select ...
) v (creator, name)
where not exists (
select 1
from sysibm.systables t
where t.creator=v.creator and t.name=v.name
);
您可以使用诸如sed之类的一些文本处理实用程序来生成类似以下的字符串:
select 'SYSIBM', 'SYSTABLES' from sysibm.sysdummy1 union all
从输入文件中找到的内容:
SYSIBM,SYSTABLES
您可以对此类处理的结果进行一些最小的更改,以构建上述最终语句。但这当然不是用于大量的表...