diff --git a/src/sql/engine/expr/ob_expr_xml_attributes.cpp b/src/sql/engine/expr/ob_expr_xml_attributes.cpp index 28d5fc2831..090f096c09 100644 --- a/src/sql/engine/expr/ob_expr_xml_attributes.cpp +++ b/src/sql/engine/expr/ob_expr_xml_attributes.cpp @@ -58,6 +58,9 @@ int ObExprXmlAttributes::calc_result_typeN(ObExprResType &type, ret = OB_ERR_INVALID_XML_DATATYPE; LOG_USER_ERROR(OB_ERR_INVALID_XML_DATATYPE, "-", ob_obj_type_str(types_stack[i].get_type())); LOG_WARN("invalid type, expect char", K(ret), K(types_stack[i].get_type())); + } else if (ob_is_nstring(types_stack[i].get_type())) { + types_stack[i].set_calc_type(ObVarcharType); + types_stack[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN); } else if (types_stack[i].get_charset_type() != CHARSET_UTF8MB4) { types_stack[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN); } diff --git a/src/sql/resolver/expr/ob_raw_expr_printer.cpp b/src/sql/resolver/expr/ob_raw_expr_printer.cpp index f399ab8444..541bfdfe61 100644 --- a/src/sql/resolver/expr/ob_raw_expr_printer.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_printer.cpp @@ -4623,8 +4623,7 @@ int ObRawExprPrinter::print_xml_attributes_expr(ObSysFunRawExpr *expr) PRINT_EXPR(expr->get_param_expr(i)); ObObj attr_key_obj = static_cast(expr->get_param_expr(i + 1))->get_value(); ObItemType expr_type = expr->get_param_expr(i + 1)->get_expr_type(); - if (expr_type == T_REF_COLUMN || - expr_type == T_FUN_SYS_CAST || + if ((T_VARCHAR != expr_type && T_CHAR != expr_type) || attr_key_obj.get_type() == ObObjType::ObUnknownType) { DATA_PRINTF(" as evalname "); PRINT_EXPR(expr->get_param_expr(i + 1));