从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
相关产品推荐
相关产品推荐

