diff --git a/src/observer/mysql/obmp_stmt_execute.cpp b/src/observer/mysql/obmp_stmt_execute.cpp index 4fc516fde32a84a8a94d386d90ab4c5a6285b800..915b7ee26d0ea1b3f0170dc9238b8665e02ac481 100644 --- a/src/observer/mysql/obmp_stmt_execute.cpp +++ b/src/observer/mysql/obmp_stmt_execute.cpp @@ -2171,7 +2171,11 @@ int ObMPStmtExecute::parse_basic_param_value(ObIAllocator &allocator, if (is_oracle_mode() && !is_complex_element) { param.set_char(dst); } else { - param.set_varchar(dst); + if (is_complex_element && dst.length()== 0) { + param.set_null(); + } else { + param.set_varchar(dst); + } } } } diff --git a/src/pl/ob_pl_resolver.cpp b/src/pl/ob_pl_resolver.cpp index 0ae3634553438556cebe3c43daea75468456b0ce..52771e8b128b5ec5103a703fad6bafd7be4b3e99 100644 --- a/src/pl/ob_pl_resolver.cpp +++ b/src/pl/ob_pl_resolver.cpp @@ -7136,7 +7136,7 @@ int ObPLResolver::add_pl_integer_checker_expr(ObRawExprFactory &expr_factory, if (OB_SUCC(ret)) { // 对于溢出的检查只关心双目运算符的计算 if (2 == expr->get_param_count() && !IS_COMMON_COMPARISON_OP(expr->get_expr_type()) - && !LOGIC_EXPR(expr) && CHECK_RES_TYPE(expr)) { + && !LOGIC_EXPR(expr) && expr->get_expr_type() != T_FUN_SYS_POWER && CHECK_RES_TYPE(expr)) { const ObRawExpr *left = ObRawExprUtils::skip_implicit_cast(expr->get_param_expr(0)); const ObRawExpr *right = ObRawExprUtils::skip_implicit_cast(expr->get_param_expr(1)); ObPLIntegerType left_pl_integer = PL_INTEGER_INVALID, right_pl_integer = PL_INTEGER_INVALID;