You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Informix数据库中递增更新serial_num字段的技术问题

问题描述

我在Informix数据库中有一张名为store的表,初始数据如下:

serial_numstore_seq
381-1582600
381-1582610
381-1582640
381-1582650
381-1582680
381-114-182690

需要将serial_num字段按规则递增更新,目标结果如下:

serial_numstore_seq
381-15-182600
381-15-282610
381-15-382640
381-15-482650
381-15-582680
381-114-182690

我尝试创建了如下存储过程:

CREATE PROCEDURE update_store()
    DEFINE counter INTEGER;
    DEFINE temp_serial_num CHAR(20);
    FOREACH cur1 FOR
        SELECT serial_num INTO temp_serial_num FROM store WHERE serial_num = '381-15'
        LET counter = 0;
        WHILE counter < (SELECT COUNT(*) FROM store WHERE serial_num = '381-15')
            LET counter = counter + 1;
            UPDATE store
               SET serial_num = temp_serial_num || '-' || counter::CHAR
             WHERE CURRENT OF cur1;
         END WHILE;
     END FOREACH;
END PROCEDURE;

但执行后所有原serial_num为'381-15'的记录都被更新为'381-15-5'。

注:serial_num字段为CHAR(16)类型,store_seq为INTEGER类型。

问题原因

你的存储逻辑存在核心错误:

  • 外层FOREACH会遍历每一条serial_num = '381-15'的记录
  • 针对每条记录,你又执行了一个循环次数等于该类记录总数(5次)的WHILE循环
  • 这导致每条记录都会被连续更新5次,从381-15-1一直覆盖到381-15-5,最终所有记录都停留在最后一次更新的结果
解决方案

只需要在外层循环外初始化计数器,遍历每条目标记录时递增计数器并执行一次更新即可:

CREATE PROCEDURE update_store()
    DEFINE counter INTEGER;
    DEFINE temp_serial_num CHAR(20);
    -- 初始化计数器为0,避免每次遍历重置
    LET counter = 0;
    -- 按store_seq排序遍历,确保序号和目标顺序匹配
    FOREACH cur1 FOR
        SELECT serial_num INTO temp_serial_num 
        FROM store 
        WHERE serial_num = '381-15'
        ORDER BY store_seq
        LET counter = counter + 1;
        -- 仅更新当前遍历到的这条记录
        UPDATE store
           SET serial_num = temp_serial_num || '-' || counter::CHAR
         WHERE CURRENT OF cur1;
     END FOREACH;
END PROCEDURE;

关键调整点

  1. 将计数器初始化移到FOREACH循环外,保证计数全局递增
  2. 添加ORDER BY store_seq,确保更新后的序号和预期的顺序一致(按store_seq从小到大排列)
  3. 移除冗余的WHILE循环,每条记录仅更新一次,避免重复覆盖
验证说明

执行该存储过程后,每条serial_num = '381-15'的记录会按store_seq的顺序依次被更新为381-15-1到381-15-5,其他记录不受影响,完全匹配预期结果。

内容的提问来源于stack exchange,提问作者Cikson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:27:50