首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DB2动态表名

DB2动态表名
EN

Stack Overflow用户
提问于 2014-06-25 19:56:03
回答 1查看 2.7K关注 0票数 0

我想要计算一些表的行数。但是应该动态使用表名。我想在一条SQL语句中做到这一点。

我试过了

代码语言:javascript
运行
复制
BEGIN ATOMIC 
  FOR tmp AS (
    SELECT tabschema || '.' || tabname tbl 
    FROM syscat.tables WHERE tabname LIKE '%CD') DO 
       (SELECT COUNT(*) FROM tmp.tbl); 
  END FOR; 
END

但是我收到了错误

代码语言:javascript
运行
复制
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0204N  "TMP.TBL" is an undefined name.  LINE NUMBER=1.  SQLSTATE=42704

却找不到其他可行的解决方案。

有什么解决方案吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-06-25 22:43:01

我假设您的SELECT COUNT(*) FROM tmp.tbl应该转换成多个语句,比如

代码语言:javascript
运行
复制
select count(*) from TABLECD
select count(*) from TABLE2CD
...

但是,您的查询将尝试对模式TMP中的表TBL进行计数。

您必须准备完整的SQL语句,将其存储在一个变量中并将其传递给prepare语句(documentation )。

可以在here中找到一个比较完整的存储过程,它在某种程度上符合您的需求。计数的结果将存储在表COUNTERS中,您可以在以后查询该表。

//edit:这是主题“适应工作”中的示例(没有测试,因为我没有DB2实例可以测试自动柜员机):

代码语言:javascript
运行
复制
CREATE PROCEDURE tableCount()
LANGUAGE SQL
BEGIN
   DECLARE SQLCODE INTEGER DEFAULT 0;
   DECLARE SQLSTATE CHAR(5);
   DECLARE vTableName VARCHAR(20);
   DECLARE vTableCount INTEGER;
   DECLARE stmt varchar(2000);
   DECLARE not_found CONDITION FOR SQLSTATE '02000';
   DECLARE c1 CURSOR FOR
   SELECT tabname from syscat.tables where tabschema='DB2ADMIN';
   DECLARE C2 CURSOR FOR S2
   DECLARE CONTINUE HANDLER FOR not_found
   SET stmt = '';
   Delete from COUNTERS;
   OPEN c1;
   getRows:
   LOOP
     FETCH c1 INTO vTableName;
     IF SQLCODE = 0 THEN
       SET stmt ='SELECT Count(*) FROM ' ||  vTableName;
       PREPARE S2 FROM stmt;
       OPEN C2;
       SET vTableCount = 0;
       FETCH C2 INTO vTableCount;
       INSERT INTO COUNTERS (tableName, tableCount)
              VALUES (vTableName, vTableCount);
       CLOSE C2;
     ELSE
       LEAVE getRows;
     END IF;
   END LOOP getRows;
   CLOSE c1;
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24408018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档