count - db2 select statement from a table name 其中表名是一个变量
问题描述
我需要从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 活动之前,我需要将所有表格行数保存在一个文本文件中。
好心提醒
解决方案
您可以使用这样的复合语句
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
@
请注意,您需要将其@
用作语句终止符才能使上述内容运行
推荐阅读
- python - 为什么该功能似乎只导入一次?
- angular - 需要在angular2上选择多个带有下拉菜单的图像
- javascript - 使用多个参数将数据从 javascript 传递到 MVC 控制器
- django - 如何使用 django 中的 remember_me 选项在 django 登录中记住用户名和密码
- python - 如何在 wxPython 向导中忽略 EVT_WIZARD_PAGE_CHANGED 事件?
- php - laravel localhost 项目希望在诸如“domain_name.com/folder_name”之类的斜杠文件夹中实时启动,出现配置错误
- python - SQL 或 Python 对事务历史进行分组的最有效方法
- python - 如何导入超过 6 位小数的数据框
- javascript - 如何在传单中使用很棒的图标库
- google-apps-script - 如何使用 Google 表格中的格式水平合并单元格/列?