问题现象
在 OceanBase 数据库集群内执行 sum() over() 类窗口函数的 SQL 语句时,窗口函数内使用 range between interval '1' minute preceding and current row 时,出现如下错误。
ErrorCode = 932, SQLState = 22001, Details = ORA-00932: inconsistent datatypes
日志内出现如下异常。
[2024-09-04 10:14:31.132228] WDIAG [SQL.ENG] calc_result_type2 (ob_expr_cast.cpp:352) [2935][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=6][errcode=-5083] transition does not support(src="INTERVAL_DAY_TO_SECOND", dst="NUMBER")
[2024-09-04 10:14:31.132240] WDIAG [SQL.RESV] calc_result_type (ob_raw_expr_deduce_type.cpp:477) [2935][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=11][errcode=-5083] calc result type2 failed(ret=-5083)
[2024-09-04 10:14:31.132244] WDIAG [SQL.RESV] visit (ob_raw_expr_deduce_type.cpp:2300) [2935][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=4][errcode=-5083] fail to calc result type(ret=-5083, types=[{meta:{type:"INTERVAL_DAY_TO_SECOND", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:-1, precision:-1, scale:20}, flag:1, calc_type:{type:"INTERVAL_DAY_TO_SECOND", collation:"binary", coercibility:"NUMERIC"}}, {meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:-1, precision:-1, scale:-1}, flag:1, calc_type:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}])
[2024-09-04 10:14:31.132277] WDIAG [SQL.RESV] postorder_accept (ob_raw_expr.cpp:569) [2935][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=32][errcode=-5083] visit failed(ret=-5083, type=501, name="T_FUN_SYS_CAST")
关键信息
关键日志信息。
[2024-09-04 10:14:31.132228] WDIAG [SQL.ENG] calc_result_type2 (ob_expr_cast.cpp:352) [2935][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=6][errcode=-5083] transition does not support(src="INTERVAL_DAY_TO_SECOND", dst="NUMBER")
问题原因
该问题原因为产品缺陷,缺陷表现为 interval 类型向数值类型做转换时出现异常。
问题的风险及影响
业务执行 SQL 报错。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V3.x、V4.x 版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP8(oceanbase-4.2.1.8-108000052024072217)及之后版本。
规避方式:
无规避方法,需要业务进行调整。