db2遍历sysibm.syscolumns输出中列出的所有表,以获取特定的列和特定的列值

在DB2中,我运行了一个查询:

从sysibm.sys列中选择*,其中a.tbcreator ='ABCD'和a.name ='EMP_ID'

输出显示了整个模式中包含特定列名EMP_ID的所有表。

现在,我需要扫描/循环遍历上面的结果输出表,并检查Tbname列(在输出中)中所有表名中的 specific EMP_ID value 以上)。

换句话说,拉出架构中的所有表,这些表可能包含等于'1234'的EMP_ID列。 谢谢。

zhurouxia 回答:db2遍历sysibm.syscolumns输出中列出的所有表,以获取特定的列和特定的列值

您可以使用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
本文链接:https://www.f2er.com/3141983.html

大家都在问