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

从DataStage作业运行DB2脚本时遇SQL0104N错误求助

解决DataStage DB2 Connector执行PSM脚本时的SQL0104N错误

问题分析

报错SQL0104N的核心原因是:DB2的PSM(过程化SQL)代码中,内部语句用分号;作为结束符,但DataStage的DB2 Connector默认会把分号当成整个SQL语句的结束标记,导致它在解析到第一个DECLARE var1 INTEGER;时就判定语句结束,后续代码被识别为非法语法。

你尝试添加的--#SET DELIMITER @未生效,大概率是两个原因:一是脚本没有用指定的分隔符@标记整个代码块的结尾;二是DataStage Connector本身的配置未同步设置对应的语句分隔符。

解决方案

1. 调整脚本格式,明确分隔规则

修改脚本,确保满足三个要求:

  • 开头用--#SET DELIMITER @声明全局语句分隔符
  • 整个PSM代码块的结尾用@标识(替代默认的分号)
  • 代码内部的语句结束符(分号)保留不变

修改后的脚本如下:

--#SET DELIMITER @
BEGIN
    DECLARE var1 INTEGER;
    DECLARE var2 INTEGER;
    SET var1=<<value1>>;
    SET var2=<<value2>>;

    BEGIN 
        WHILE (var1 <= var2)
        DO
            DELETE FROM (SELECT * FROM table_name WHERE ID >= var1 FETCH FIRST 2000 ROWS ONLY);
            COMMIT;
            SET var1 = (var1+2000);
        END WHILE;
    END;
END@

2. 配置DataStage DB2 Connector的语句分隔符

在DataStage作业的DB2 Connector属性面板中,找到Statement Delimiter(或同类名称的配置项),将其值设置为@。这一步是关键:如果Connector仍使用默认的分号作为分隔符,即使脚本声明了--#SET DELIMITER @,也无法被正确识别。

3. 验证参数替换有效性

确保脚本中的<<value1>>和<<value2>>已被替换为实际整数值,或者通过DataStage的参数传递机制完成动态赋值,避免占位符未替换引发额外语法错误。

内容的提问来源于stack exchange,提问作者Abhishek.Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:27:17