有没有一种方法可以在数据库模式而不是表上执行查询

时间:2020-07-02 19:10:27

标签: sql database database-design db2

感谢您阅读我的文章。在我们的组织中,我们使用具有多个架构的IBM DB2数据库,这些架构都有各自的表,过程,视图等。我们希望找到一种基于'changed_by'字段来查询这些架构之一的快速方法。该模式的每个表中都存在。

我们的一个用户对我们的数据库具有写访问权限。我们希望概述一下他最近几天更新的表。单独查询架构的每个表是很多工作。

架构名称为S_ORDER_SUMM,该架构包含182个表。

我们需要这样的东西

select (ALL TABLES) from S_ORDER_SUMM
where CHANGED_BY = 'Our_User'

任何帮助将不胜感激。

1 个答案:

答案 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_SUMMCHANGE_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语句中。