问题现象
子查询带有窗口函数,执行时报错 -4016
关键日志含有 failed to set sharable expr(ret=-4016 信息,完整日志如下。
[2024-11-20 18:07:12.648742] WDIAG [SQL.RESV] set_sharable_expr_reference (ob_dml_stmt.cpp:1893) [1862910][T1052_L0_G0][T1052][xxxxx-xxxxx-xxxxx-xxxxx] [lt=85][errcode=-4016] failed to set sharable expr(ret=-4016, expr={item_type:"T_OP_EXISTS", result_type:{meta:{type:"INT", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:-1, precision:1, scale:0}, flag:1, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["CNT_COLUMN", "CNT_SUB_QUERY"], rel_id:[1], children:[{item_type:"T_REF_QUERY", result_type:{meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:-1, precision:-1, scale:-1}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_SUB_QUERY", "CNT_COLUMN", "CNT_SUB_QUERY"], rel_id:[1], id:0, output_column:1, is_set:true, is_cursor:false, is_multiset:false, column_types:[{meta:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:1, precision:-1, scale:-85}, flag:1, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}], enum_set_values:[], children:[{item_type:"T_QUESTIONMARK", result_type:{meta:{type:"VARCHAR2", collation:"utf8mb4_bin", coercibility:"IMPLICIT"}, accuracy:{length:38, precision:2, scale:-1}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_CONST", "IS_DYNAMIC_PARAM", "CNT_CONST", "CNT_DYNAMIC_PARAM"], value:{"UNKNOWN":-1}, outer_expr:{item_type:"T_REF_COLUMN", result_type:{meta:{type:"VARCHAR2", collation:"utf8mb4_bin", coercibility:"IMPLICIT"}, accuracy:{length:38, precision:2, scale:-1}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_COLUMN", "CNT_COLUMN"], rel_id:[1], table_id:18446744073709551609, column_id:21, database_name:"PZK", table_name:"C", synonym_name:"", synonym_db_name:"", column_name:"VOUCHER_ID", column_flags:34359738368, enum_set_values:[], is_lob_column:false, is_joined_dup_column:false, is_unpivot_mocked_column:false, is_hidden:false, from_alias_table:true, is_rowkey_column:false, is_unique_key_column:false, is_mul_key_column:true, is_strict_json_column:0, srs_id:18446744073709551615, udt_set_id:0}, is_onetime:false}]}]})
问题原因
对子查询中窗口函数的改写存在缺陷,导致报错 -4016。
问题的风险及影响
SQL 执行失败报错。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP5(oceanbase-4.2.1.5-105000072024041817)及之后版本。
规避方式:
在查询中添加 hint
/*+no_win_magic*/规避。