db2在sysibm.syscolumns输出中列出的所有表中循环查找特定列和特定列值
在DB2中,我运行了一个查询: 从sysibm.sysa列中选择*,其中a.tbcreator='ABCD'和a.name='EMP\u ID' 输出显示整个架构中包含特定列名EMP_ID的所有表 现在,我需要扫描/循环上面生成的输出表,并检查Tbname列(在上面的输出中)下列出的所有表名中是否有特定的EMP_ID值 换句话说,拉出模式中的所有表,这些表可能包含等于“1234”的列EMP_ID。db2在sysibm.syscolumns输出中列出的所有表中循环查找特定列和特定列值,db2,Db2,在DB2中,我运行了一个查询: 从sysibm.sysa列中选择*,其中a.tbcreator='ABCD'和a.name='EMP\u ID' 输出显示整个架构中包含特定列名EMP_ID的所有表 现在,我需要扫描/循环上面生成的输出表,并检查Tbname列(在上面的输出中)下列出的所有表名中是否有特定的EMP_ID值 换句话说,拉出模式中的所有表,这些表可能包含等于“1234”的列EMP_ID。 谢谢。您可以在Db2中使用复合语句执行此类任务 下面是单个事务中的一个最小示例 您需要将语句终止符
谢谢。您可以在Db2中使用复合语句执行此类任务 下面是单个事务中的一个最小示例 您需要将语句终止符设置为
@
才能运行它
CREATE TABLE FIND_VALUE (
TABSCHEMA VARCHAR(128) NOT NULL
, TABNAME VARCHAR(128) NOT NULL
, ROW_COUNT BIGINT NOT NULL
)
@
BEGIN
FOR C AS
SELECT 'INSERT INTO FIND_VALUE'
|| ' SELECT ''' || TABSCHEMA || ''',''' || TABNAME || ''''
|| ', COUNT(*)'
|| ' FROM "' || TABSCHEMA || '"."' || TABNAME || '"'
|| ' WHERE "' || COLNAME || '" = 1234' AS S
FROM
SYSCAT.COLUMNS
JOIN SYSCAT.TABLES USING ( TABSCHEMA, TABNAME )
WHERE
TYPE = 'T'
AND COLNAME = 'EMP_ID'
DO
EXECUTE IMMEDIATE C.S;
END FOR;
END
@
SELECT * FROM FIND_VALUE