diff --git a/src/sql/resolver/dml/ob_del_upd_resolver.cpp b/src/sql/resolver/dml/ob_del_upd_resolver.cpp index 0b7a388e8..e013f5699 100644 --- a/src/sql/resolver/dml/ob_del_upd_resolver.cpp +++ b/src/sql/resolver/dml/ob_del_upd_resolver.cpp @@ -2244,10 +2244,16 @@ int ObDelUpdResolver::expand_record_to_columns(const ParseNode &record_node, const pl::ObUserDefinedType *user_type = NULL; ParseNode *column_node = NULL; const ParseNode *member_node = &record_node; - while (NULL != member_node && NULL != member_node->children_[1]) { + bool multi_level_count = 0; + while (NULL != member_node && member_node->num_child_ > 1 && NULL != member_node->children_[1]) { member_node = member_node->children_[1]; + multi_level_count++; } - if (OB_ISNULL(column_node = new_terminal_node(allocator_, T_IDENT))) { + if (multi_level_count > 0) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("not support to expand", K(composite_type), K(ret)); + LOG_USER_ERROR(OB_NOT_SUPPORTED, "mutil level record reference"); + } else if (OB_ISNULL(column_node = new_terminal_node(allocator_, T_IDENT))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_WARN("make db name T_IDENT node failed", K(ret)); } else if (OB_ISNULL(member_node->children_[1] = new_non_terminal_node(allocator_,