Skip to content
搜索以了解InterSystems产品和解决方案,职业机会等。

2025年2月19日警报:SQL 查询返回错误结果

InterSystems 已纠正了两个可能导致少数 SQL 查询返回不正确结果的问题。 此外,InterSystems 还纠正了日期/时间数据类型处理中的不一致性,对于依赖于先前不一致性行为的现有应用程序来说,这种不一致性可能会导致不同的、意想不到的但正确的结果。

DP-436825: 使用横向连接的 SQL 查询可能返回错误结果

第一个问题(DP-436825)仅影响在使用非默认的单进程内存限制(“.cpf”文件中的“ bbsiz”参数)配置的实例上,使用隐式或显式 横向连接的SQL查询。 InterSystems IRIS 的默认安装 bbsiz 为-1(因此没有内存限制),而从旧版本升级时将保留以前的设置。 当这种查询在运行时使用并行化执行(包括系统使用并行化执行的情况)时,查询可能会返回不正确的结果。

此问题影响以下产品的 2023.3、2024.1.0、2024.1.1、2024.1.2、2024.2 和 2024.3 版本:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare®Health Connect

该问题也会影响基于上述产品的其他 InterSystems 产品,包括 HealthShare® Unified Care Record和套件:版本 2024.2。虽然Unified Care Record和套件在产品代码中不使用横向连接的 SQL 查询,但升级到 HealthShare 2024.2 的 HealthShare 客户如果具有非默认的每个进程内存限制,并且还编写了自己的使用横向连接的 SQL 查询,则可能会受到影响。

要避免该问题,请使用以下三个选项之一:

  • 将 bbsiz 参数设置为-1,取消每个进程的内存限制。
  • 在包含横向连接的查询中使用 %NOPARALLEL 关键字。
  • 暂时禁用 自适应模式(Adaptive Mode)避免自动并行处理符合条件的查询

这些方法都能确保查询返回正确的结果。

该缺陷的修正被标识为 DP-436825,并将从 2024.1.3 和 2025.1.0 版本开始,包含在所有未来的产品发布中。 该修复也可以通过Ad-hoc分发。

DP-436998:按 %ID 反排序的 SQL 查询进入无尽循环

第二个问题(DP-436998)影响按行 ID 降序排序的 SQL 查询,其中行 ID 为正整数(与位图兼容),特别是在特定数据的情况下。 在这种情况下,查询可能会进入无尽循环,并不断返回相同的结果集,直至终止。

此问题影响以下产品的 2022.2、2022.3、2023.x 和 2024.x 版本:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare®Health Connect

它还会影响基于上述产品的其他 InterSystems 产品,包括 HealthShare® Unified Care Record和套件:2024.1 版和 2024.2 版。 虽然Unified Care Record和套件在产品代码中不使用按 %ID 反向排序的 SQL 查询,但 HealthShare 2024.1 和 HealthShare 2024.2 客户自己编写的按 %ID 反向排序的 SQL 查询可能会受到影响。

,该缺陷的更正标识为 DP-436998。 从 2023.1.6、2024.1.3 和 2025.1.0 开始,今后的所有产品版本都将包含该功能。 该修复也可以通过Ad-hoc分发。

DP-436633: 比较 DATE 和 TIMESTAMP 值的 SQL 查询

InterSystems 最近纠正了使用 <=、> 和 BETWEEN 操作符比较 DATE 和 TIMESTAMP 值的不一致性。 此修正更改了特定日期和时间比较的结果。

这一更新后的行为是在以下(产品/系统)的 2023.3 版本中引入的

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare®Health Connect

它还会影响基于上述产品的其他 InterSystems 产品,包括 HealthShare® Unified Care Record和套件:Version 2024.2。

它适用于所有后续版本。

更新行为后,在比较之前会将日期值强制转换为 TIMESTAMP 值。 这符合 SQL 标准,即将较不精确的数据类型强制转换为最精确的数据类型。

例如,采用新的行为(这是符合标准的),当这些字段的值对应相同的日历日期时(除非 MyTimestamp 正好对应午夜),查询谓词“MyTimeStamp > MyDate”的评估结果为 FALSE。 之前,只有当 MyTimeStamp 字段被定义为 %PosixTime 格式时,行为才完全符合标准,而在使用 %Timestamp 或某些特殊函数和变量的组合时,某些情况下会返回不符合标准的结果。

为了确保比较的可预测性,InterSystems 建议使用显式的 CAST 函数,特别是在使用 CASE 语句或 SQL 函数(如 GETDATE()、NVL() 和 IFNULL())时,因为这些函数的结果类型可能并不明显。

为了帮助评估哪些语句会受到行为变更的影响,InterSystems 在查询计划中引入了一个警告,并提供了一个可选的系统标志,使得此类语句在运行时能够引发错误。 启用该标记有助于对应用程序代码进行回归测试,并为运行时的用户查询提供额外的安全网。 此信息功能标识为 DP-436633,将包含在从 2024.1.4 和 2025.1.0 开始的所有未来产品版本中。

更多信息

如果您对本警报有任何疑问,请联系 全球响应中心

最新警报和通知

2月 19, 2025
InterSystems 已修复一个缺陷,该缺陷导致在使用特定 $LIST 语法时引入无效的数据库和日志记录。 遇到这种缺陷的可能性很低,但对运营的影响可能很大。
10月 09, 2024
InterSystems 已经解决了影响 InterSystems IRIS、InterSystems IRIS for Health、HealthShare、HealthShare HealthConnect、TrakCare、Caché 和 Ensemble 的 Web 网关和 CSP 网关的安全漏洞。可从 InterSystems 全球响应中心 (WRC) 获取补救步骤和其他指导文件。在讨论本通知时,请参考 "SVR2024A"。 如需修复帮助,请联系您的应用程序提供商或 InterSystems 全球响应中心。
8月 21, 2024
InterSystems 已修复了一个缺陷,在极少数情况下,该缺陷可能导致多卷数据库出现数据库损坏或 错误。只有被截断的数据库才存在风险。
6月 03, 2024
从发布InterSystems IRIS®数据平台2022.3开始,InterSystems修改了许可证强制执行机制,以包括REST和SOAP请求。由于这种变化,在升级后,使用REST或SOAP的非处理器核数的许可证环境下,用户可能会遇到更高的许可证消耗。要确定此警报是否适用于您的InterSystems许可证,请按照下面链接的FAQ中的说明进行操作。
5月 01, 2024
InterSystems has corrected an issue that can cause a small number of SQL queries to return incorrect results. See below for the specifics on impacted queries.
11月 14, 2023
There are 10 alerts in the HealthShare HS2023-02 Alert communication. An alert summary for each issue is shown is in the table below. Details for each alert are contained in the attached document: HS2023-02-Communication.
6月 17, 2023
InterSystems 已纠正导致进程内存使用量增加的缺陷。
5月 11, 2023
InterSystems已经解决了影响Caché、Ensemble、HealthShare、InterSystems IRIS、InterSystems IRIS for Health、HealthShare HealthConnect和TrakCare的安全漏洞。 这些漏洞影响到InterSystems所有版本的产品。
4月 28, 2023
InterSystems 已修复了一个缺陷,该缺陷可能会导致使用 IBM POWER8 或更高版本的 POWER 处理器的 AIX 系统上的数据库和Journal日志文件损坏。只有在使用数据库或Journal日志加密时才会触发此缺陷。