我需要从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活动之前,我需要将所有表行计数保存在文本文件中。
请告知
答案 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
@
请注意,您需要使用@
作为语句终止符才能使以上代码运行