有没有办法对数据库模式而不是表执行查询

xpszyzbs  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(429)

谢谢你看我的帖子。在我们的组织中,我们使用带有多个模式的IBMDB2数据库,这些模式都有自己的表、过程、视图等。。。我们想找到一种快速的方法,根据存在于模式的每个表中的'changed\u by'字段来查询其中一个模式。
我们的一个用户对我们的数据库有写访问权。我们想了解一下他在过去几天里到底更新了哪个表。单独查询模式的每个表需要做很多工作。
模式名为s\u order\u summ,模式包含182个表。
我们需要这样的东西:

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

任何帮助都将不胜感激。

sirbozc5

sirbozc51#

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 每个schema表上的语句 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'
)

例如,如果将输出保存到某个文件,则可以在以后运行此脚本。
您也可以为所有表生成一条语句。但是您需要取消注解注解掉的行,并将输出 Package 成final SELECT 语句。

相关问题