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

ABL Progress OpenEdge:基于CSV更新数据库环境记录的技术问题

环境刷新:CSV导入匹配更新与空行问题解决

核心需求实现:环境2记录匹配更新

当前导入脚本未基于主键做匹配,无法实现“存在则更新”的逻辑,需通过临时表中转CSV数据,再与环境2的Test1表按主键(entryID)匹配处理。

1. 定义临时表存储CSV数据

创建与Test1结构一致的临时表,并按主键entryID建立唯一索引,避免重复数据:

DEFINE TEMP-TABLE ttTest1
    LIKE Test1
    INDEX idxEntryID IS PRIMARY UNIQUE entryID.

2. 读取CSV并过滤空行

读取CSV时跳过空行,避免空行导致的entryID异常:

INPUT FROM VALUE("X:\Test\Test1.csv").

REPEAT:
    CREATE ttTest1.
    IMPORT DELIMITER ',' ttTest1.
    
    // 检测空行(entryID为空),直接丢弃该记录
    IF ttTest1.entryID = ? THEN DO:
        DELETE ttTest1.
        NEXT.
    END.
END.

INPUT CLOSE.

3. 匹配环境2记录执行更新

遍历环境2的Test1表,根据entryID查找临时表中的对应数据,存在则更新:

FOR EACH Test1 EXCLUSIVE-LOCK:
    FIND FIRST ttTest1 WHERE ttTest1.entryID = Test1.entryID NO-LOCK NO-ERROR.
    
    IF AVAILABLE ttTest1 THEN DO:
        // 全字段更新,若需指定字段可逐个赋值
        ASSIGN Test1 = ttTest1.
    END.
    // 可选:若需插入CSV中存在但环境2没有的记录,取消以下注释
    // ELSE DO:
    //     CREATE Test1.
    //     Test1 = ttTest1.
    // END.
END.

MESSAGE "数据更新完成" VIEW-AS ALERT-BOX INFORMATION.

空行问题根源与解决

删除记录后留下的空行,会导致IMPORT读取时错位,把后续行的entryID重复读取,触发主键重复报错。上述代码通过检测entryID = ?判断空行,直接丢弃异常记录,从根源避免该问题。

另外,导出CSV时可确保无空行(当前导出代码已满足,无需额外修改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:54:55