表名中的db2 select语句,其中表名是变量

时间:2019-11-06 08:30:08

标签: count db2

我需要从db2数据库中选择所有表行计数。

我有一个查询来选择所有模式和表名:

select rtrim(tabschema)||'.'||rtrim(tabname) as tableName from syscat.tables where tabschema = 'COM' order by tabname;

此查询为我提供了数据库表名称的列表。

我想做类似的事情:

select count(*) from tableFromTheFirstQuery

tableFromThePreviousQuery由我的第一个查询的tableName代替。

我不能喜欢

select count(*) from (select rtrim(tabschema)||'.'||rtrim(tabname) as tableName from syscat.tables where tabschema = 'COM' order by tabname);

我只会得到第一个查询的计数结果。

我不确定这种方式是否存在。基本上,在执行DR活动之前,我需要将所有表行计数保存在文本文件中。

请告知

1 个答案:

答案 0 :(得分:0)

您可以使用这样的复合语句

CREATE TABLE COUNT_ROWS (
    TABSCHEMA  VARCHAR(128) NOT NULL
,   TABNAME    VARCHAR(128) NOT NULL
,   ROW_COUNT   BIGINT
)
@
BEGIN
    FOR C AS cur CURSOR WITH HOLD FOR
        SELECT 'INSERT INTO COUNT_ROWS SELECT ''' || TABSCHEMA || ''',''' || TABNAME || ''', COUNT(*) FROM '
            || '"' ||  TABSCHEMA || '"."' || TABNAME || '"' AS S
        FROM SYSCAT.TABLES
        WHERE TYPE = 'T' AND TABSCHEMA NOT LIKE 'SYS%'
        WITH UR
    DO
          EXECUTE IMMEDIATE C.S;
          COMMIT;
    END FOR;
END
@
SELECT * FROM COUNT_ROWS
@

请注意,您需要使用@作为语句终止符才能使以上代码运行