我需要构造一个查询,该查询将从数据库中获取所有表并将一列值重置为0
。
问题在于表将被动态添加并且没有固定数量的表。例如,在预设位置,我有大约30张桌子,并且数量会增加。
我使用以下查询从数据库中获取所有现有表:
SELECT TABNAME from SYSCAT.TABLES where TABSCHEMA = 'ABC';
我还设置了更新查询的框架,以将值重置为0
UPDATE ABC.CMP7_CALL_RECORD_EVENT SET CMP7_COUNT = 0 ;
现在通过同时使用两个查询,如何构造一个查询,该查询将从数据库中获取所有表并将每个表的特定列值重置为0
?
谢谢!
答案 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。在运行上述示例时,您需要使用;
以外的语句终止符