更新日期:2025年11月24日,以反映临时请求所需修复措施的完整列表。
|
警报 ID
| 受影响的产品和版本 | 风险类别和评分 | 明确要求 |
| DP-445015 | InterSystems IRIS® 数据平台 InterSystems IRIS® for Health HealthShare® Health Connect 版本 2020.4.0、2021.1.0 - 2021.1.4、2021.2.0、2022.1.0 - 2022.1.7、2022.2.0、2022.3.0、2023.1.0 - 2023.1.7、2023.2.0、2023.3.0、2024.1.0 - 2024.1.5、2024.2.0、2024.3.0、2025.1.0 - 2025.1.2 和 2025.2.0 | 错误结果:低风险 | 使用在 WHERE 子句中包含表达式的 SQL 查询,该表达式包括 BETWEEN 子句中的算术运算符或至少出现两次的特定一元函数。 |
问题
在上述版本中,当 SQL 查询满足以下任一条件时,可能会返回错误的结果:
- 该查询使用 BETWEEN 操作符,涉及 WHERE 子句中一个字段的算术表达式
- 查询不止一次使用了与应用于字段的一元函数完全相同的算术表达式(在 WHERE 子句中至少出现一次)。 受影响的一元函数有
- 一元否定或 %MINUS()
- 单数 +、TO_NUMBER() 或 %PLUS()
- 整理函数,如 %SQLUPPER()、%SQLSTRING()、%UPPER() 和 %ALPHAUP
- 集合属性上的 %KEY 和 %VALUE 谓词
- TRUNCATE()
请注意,BETWEEN子句算作两个条件;这意味着在BETWEEN子句中使用此类表达式的查询会受到此问题的影响。
例如,以下语句受到影响,因为它满足第一个条件:
SELECT * FROM t1 WHERE 4*(c1+2) BETWEEN 0 AND 1
SELECT * FROM t1 WHERE (1-TO_NUMBER(c1))/2 BETWEEN 0 AND 1
以下语句受到影响,因为它们满足第二个条件:包含一元函数表达式且该表达式出现多次:
SELECT -c1 FROM t1 WHERE -c1 > 0
SELECT * FROM t1 WHERE -c1 > 0 HAVING0 < -c1
SELECT * FROM t1 WHERE -c1 > 0 ORDER BY –c1
SELECT * FROM t1 WHERE -c1-1 > 0 AND -c1-1 < 5
SELECT * FROM t1 WHERE %MINUS(c1) > 0 AND 0 < %MINUS(c1)+2
SELECT TRUNCATE(c2,2) FROM t1 WHERE TRUNCATE(c2,2)-20>0
SELECT favoriteColors FROM sample.person WHERE FOR SOME %ELEMENT(favoriteColors) ( %KEY = 2 OR %KEY + 1 = 7 ) ORDER BY 1
以下语句未受影响,因为没有使用带有算术表达式的BETWEEN操作符(第一个条件),且没有一元函数表达式出现多次(第二个条件):
SELECT c1 FROM t1 WHERE -c1 > 0
SELECT * FROM t1 WHERE 2*c1 > 0 AND 0 < TO_NUMBER(c1)
SELECT 2*c1 FROM t1 WHERE 2*c1 > 1
SELECT * FROM t1 WHERE c1/2 > 1 or c1/2 < 5
SELECT * FROM t1 WHERE 2*c1+3 > 0 AND 0 < -c1
影响
此问题可能导致InterSystems SQL在处理过程中静默地用不同值替换重复的字段表达式,从而返回错误结果。
这可能会引发各种问题:
- 结果集中可能错误地包含或排除了某些行。
- 结果集排序可能有误。
- 基于该字段引用的列可能会有不正确的值。
解决方案
该问题已在 2024.1.6、2025.1.3、2025.3.0 和更新版本中得到纠正。
- 2025.3.0 计划于 2025 年 11 月 19 日推出。
- 2025.1.3 计划于 2026 年 1 月 28 日推出。
- 2024.1.6 计划于 2026 年 4 月 15 日推出。
在此期间,如需在这些版本发布前获得修正,客户可通过全球响应中心请求临时补丁(DP-445844、DP-445089、DP-446197、DP-445136)
更多信息
如有疑问或需要帮助,请联系InterSystems 全球响应中心 (WRC)。
























