在DB2中,我运行了一个查询:
从sysibm.sys列中选择*,其中a.tbcreator ='ABCD'和a.name ='EMP_ID'
输出显示了整个模式中包含特定列名EMP_ID的所有表。
现在,我需要扫描/循环遍历上面的结果输出表,并检查Tbname列(在输出中)中所有表名中的 specific EMP_ID value 以上)。
换句话说,拉出架构中的所有表,这些表可能包含等于'1234'的EMP_ID列。 谢谢。
在DB2中,我运行了一个查询:
从sysibm.sys列中选择*,其中a.tbcreator ='ABCD'和a.name ='EMP_ID'
输出显示了整个模式中包含特定列名EMP_ID的所有表。
现在,我需要扫描/循环遍历上面的结果输出表,并检查Tbname列(在输出中)中所有表名中的 specific EMP_ID value 以上)。
换句话说,拉出架构中的所有表,这些表可能包含等于'1234'的EMP_ID列。 谢谢。
您可以使用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