diff --git a/src/sql/engine/expr/ob_expr_get_sys_var.cpp b/src/sql/engine/expr/ob_expr_get_sys_var.cpp index 2e8d7fd662..1b31e62b15 100644 --- a/src/sql/engine/expr/ob_expr_get_sys_var.cpp +++ b/src/sql/engine/expr/ob_expr_get_sys_var.cpp @@ -101,7 +101,7 @@ int ObExprGetSysVar::calc_result_type2(ObExprResType &type, OX(type.set_collation_type(conn_coll)); } } - } else if (ob_is_int_tc(data_type)) { + } else if (ob_is_int_uint_tc(data_type)) { type.set_accuracy(ObAccuracy::MAX_ACCURACY2[lib::is_oracle_mode()][data_type]); } } diff --git a/src/sql/engine/expr/ob_expr_get_user_var.cpp b/src/sql/engine/expr/ob_expr_get_user_var.cpp index b5dcfa03ad..a96675cb90 100644 --- a/src/sql/engine/expr/ob_expr_get_user_var.cpp +++ b/src/sql/engine/expr/ob_expr_get_user_var.cpp @@ -70,8 +70,7 @@ int ObExprGetUserVar::calc_result_type1(ObExprResType &type, } } if (session_var.meta_.is_decimal_int()) { - type.set_precision(wide::ObDecimalIntConstValue::get_max_precision_by_int_bytes( - session_var.value_.get_int_bytes())); + type.set_precision(static_cast(OB_MAX_DECIMAL_POSSIBLE_PRECISION)); } type.set_collation_level(session_var.meta_.get_collation_level()); type.set_collation_type(session_var.meta_.get_collation_type()); @@ -137,6 +136,11 @@ int ObExprGetUserVar::eval_get_user_var(const ObExpr &expr, ObEvalCtx &ctx, ObDa if (is_lob_storage(res_obj.get_type())) { OZ(ob_adjust_lob_datum(res_obj, expr.obj_meta_, ctx.exec_ctx_.get_allocator(), res)); } + } else if (sess_obj.is_decimal_int() && sess_obj.get_int_bytes() != sizeof(int512_t)) { + ObDecimalIntBuilder res_builder; + res_builder.from(sess_obj.get_decimal_int(), sess_obj.get_int_bytes()); + res_builder.extend(sizeof(int512_t)); + res.set_decimal_int(res_builder.get_decimal_int(), res_builder.get_int_bytes()); } else { OZ(res.from_obj(sess_obj)); if (is_lob_storage(sess_obj.get_type())) { diff --git a/src/sql/engine/expr/ob_expr_oracle_decode.cpp b/src/sql/engine/expr/ob_expr_oracle_decode.cpp index 1902d54e2a..2590668b4f 100644 --- a/src/sql/engine/expr/ob_expr_oracle_decode.cpp +++ b/src/sql/engine/expr/ob_expr_oracle_decode.cpp @@ -154,6 +154,8 @@ int ObExprOracleDecode::calc_result_typeN(ObExprResType &type, type.set_calc_type(ObVarcharType); } else if (lib::is_oracle_mode() && ob_is_nchar(calc_type.get_type())) { type.set_calc_type(ObNVarchar2Type); + } else if (ob_is_decimal_int_tc(calc_type.get_type())) { + type.set_calc_type(ObNumberType); } else { // 保留原mysql下的行为 type.set_calc_type(calc_type.get_type());