感谢您阅读我的文章。在我们的组织中,我们使用具有多个架构的IBM DB2数据库,这些架构都有各自的表,过程,视图等。我们希望找到一种基于'changed_by'字段来查询这些架构之一的快速方法。该模式的每个表中都存在。
我们的一个用户对我们的数据库具有写访问权限。我们希望概述一下他最近几天更新的表。单独查询架构的每个表是很多工作。
架构名称为S_ORDER_SUMM,该架构包含182个表。
我们需要这样的东西
select (ALL TABLES) from S_ORDER_SUMM
where CHANGED_BY = 'Our_User'
任何帮助将不胜感激。
答案 0 :(得分:0)
SELECT
-- 'UNION ALL ' ||
'SELECT ''' || T.TABNAME || ''' FROM SYSIBM.SYSDUMMY1 '
||'WHERE EXISTS (SELECT 1 FROM "' || T.TABSCHEMA || '"."' || T.TABNAME || '" '
||'WHERE CHANGE_DATE > CURRENT TIMESTAMP - 2 DAY AND CHANGED_BY=''Our_User'')'
FROM SYSCAT.TABLES T
JOIN SYSCAT.COLUMNS C ON C.TABSCHEMA=T.TABSCHEMA AND C.TABNAME=T.TABNAME
WHERE T.TABSCHEMA='S_ORDER_SUMM' AND T.TYPE='T'
AND C.COLNAME IN ('CHANGE_DATE', 'CHANGED_BY')
GROUP BY T.TABSCHEMA, T.TABNAME
HAVING COUNT(1)=2;
上面的查询在模式SELECT
的每个表上返回包含S_ORDER_SUMM
和CHANGE_DATE
列的CHANGED_BY
语句列表。
这是一系列以下语句(实际上,每个语句一行,我仅将其格式化为演示):
SELECT 'MYTABLE'
FROM SYSIBM.SYSDUMMY1
WHERE EXISTS
(
SELECT 1
FROM "S_ORDER_SUMM"."MYTABLE"
WHERE CHANGE_DATE > CURRENT TIMESTAMP - 2 DAY AND CHANGED_BY='Our_User'
)
例如,如果将输出保存到某个文件,则可以随后运行此脚本。
您也可以为所有表生成一条语句。但是您需要取消注释掉注释行,并手动将输出包装到最终的SELECT
语句中。