如何修复DB2中的“SQL Error Keyword FROM not expected”错误?
问题分析与解决方案
你的错误是因为使用了DB2不支持的UPDATE ... FROM语法(这种写法常见于SQL Server),DB2的UPDATE语句不允许直接跟FROM子句;同时原语句还存在逻辑漏洞:没有指定pomhst和pomhdr两个表的关联条件,这会导致所有符合条件的pomhst行被更新成任意一个满足hdr.postat=3的poshp1值,显然不符合业务逻辑。
下面提供两种DB2兼容的正确写法:
方法1:使用MERGE语句(推荐)
MERGE是DB2中实现关联更新的标准语法,逻辑更清晰:
MERGE INTO pomhst hst USING pomhdr hdr -- 替换成你实际的表关联条件(比如订单号、单据号等),示例用pono作为关联字段 ON (hst.pono = hdr.pono AND LENGTH(LTRIM(RTRIM(hst.poshp1))) > 0 AND hdr.postat = 3) WHEN MATCHED THEN UPDATE SET hst.ponot1 = hdr.poshp1;
方法2:使用UPDATE结合子查询
如果更习惯UPDATE写法,可以用子查询获取要更新的值,同时用EXISTS确保只更新有匹配的行:
UPDATE pomhst hst SET ponot1 = ( SELECT hdr.poshp1 FROM pomhdr hdr WHERE hdr.postat = 3 AND hst.pono = hdr.pono -- 关联条件要和下方保持一致 ) WHERE LENGTH(LTRIM(RTRIM(hst.poshp1))) > 0 AND EXISTS ( SELECT 1 FROM pomhdr hdr WHERE hdr.postat = 3 AND hst.pono = hdr.pono );
关键注意点
- 必须补充
pomhst和pomhdr的关联条件,否则会出现非预期的批量更新。 - DB2对UPDATE语法要求严格,不支持跨表UPDATE的FROM写法,必须用MERGE或子查询的方式实现。
内容的提问来源于stack exchange,提问作者Weboshii
相关产品推荐
相关产品推荐

