如何构建一个查询,该查询将从数据库中获取所有表,并且必须将一个特定的列值设置为0

时间:2019-08-02 08:04:43

标签: db2

我需要构造一个查询,该查询将从数据库中获取所有表并将一列值重置为0。 问题在于表将被动态添加并且没有固定数量的表。例如,在预设位置,我有大约30张桌子,并且数量会增加。

我使用以下查询从数据库中获取所有现有表:

SELECT TABNAME from SYSCAT.TABLES where TABSCHEMA = 'ABC'; 

我还设置了更新查询的框架,以将值重置为0

UPDATE ABC.CMP7_CALL_RECORD_EVENT SET CMP7_COUNT = 0 ;

现在通过同时使用两个查询,如何构造一个查询,该查询将从数据库中获取所有表并将每个表的特定列值重置为0

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以按照我的@mao尝试使用复合SQL块

BEGIN FOR D AS 
     SELECT 'UPDATE "' || TABSCHEMA ||'"."'|| TABNAME 
     || '" SET CMP7_COUNT = 0 WHERE CMP7_COUNT IS DISTINCT FROM 0' AS STMT
     FROM SYSCAT.COLUMNS WHERE COLNAME = 'CMP7_COUNT'
     DO      
         EXECUTE IMMEDIATE D.STMT;
     END FOR;
END

如果要更新的表/行很多,则可能需要在每次更新后添加一个COMMIT。如果需要,则光标必须为WITH HOLD。即

BEGIN FOR D AS cur CURSOR WITH HOLD FOR 
     SELECT 'UPDATE "' || TABSCHEMA ||'"."'|| TABNAME 
     || '" SET CMP7_COUNT = 0 WHERE CMP7_COUNT IS DISTINCT FROM 0' AS STMT
      FROM SYSCAT.COLUMNS WHERE COLNAME = 'CMP7_COUNT'
      DO      
          EXECUTE IMMEDIATE D.STMT;
          COMMIT;
      END FOR;
END

P.S。在运行上述示例时,您需要使用;以外的语句终止符