diff --git a/src/pl/ob_pl_resolver.cpp b/src/pl/ob_pl_resolver.cpp index fe4b31900..04a02b48b 100644 --- a/src/pl/ob_pl_resolver.cpp +++ b/src/pl/ob_pl_resolver.cpp @@ -3338,12 +3338,13 @@ int ObPLResolver::resolve_dblink_type(const ParseNode *node, CK (T_SP_ACCESS_NAME == access_node->type_); // access_node must be a package type. CK (3 == access_node->num_child_); - CK (OB_NOT_NULL(access_node->children_[1]) && OB_NOT_NULL(access_node->children_[2])) if (OB_SUCC(ret)) { dblink_name.assign_ptr(node->children_[1]->str_value_, static_cast(node->children_[1]->str_len_)); - pkg_name.assign_ptr(access_node->children_[1]->str_value_, - static_cast(access_node->children_[1]->str_len_)); + if (OB_NOT_NULL(access_node->children_[1])) { + pkg_name.assign_ptr(access_node->children_[1]->str_value_, + static_cast(access_node->children_[1]->str_len_)); + } udt_name.assign_ptr(access_node->children_[2]->str_value_, static_cast(access_node->children_[2]->str_len_)); if (OB_NOT_NULL(access_node->children_[0])) { @@ -11162,6 +11163,7 @@ int ObPLResolver::resolve_dblink_routine(ObPLResolveCtx &resolve_ctx, int ObPLResolver::resolve_dblink_routine_with_synonym(ObPLResolveCtx &resolve_ctx, const uint64_t pkg_syn_id, + const ObString &cur_db_name, const ObString &routine_name, const common::ObIArray &expr_params, const ObIRoutineInfo *&routine_info) @@ -11175,7 +11177,8 @@ int ObPLResolver::resolve_dblink_routine_with_synonym(ObPLResolveCtx &resolve_ct OZ (checker.init(resolve_ctx.schema_guard_, resolve_ctx.session_info_.get_sessid())); OZ (ObPLDblinkUtil::separate_name_from_synonym(checker, resolve_ctx.allocator_, resolve_ctx.session_info_.get_effective_tenant_id(), - resolve_ctx.session_info_.get_database_name(), + cur_db_name.empty() ? + resolve_ctx.session_info_.get_database_name() : cur_db_name, pkg_syn_id, dblink_name, db_name, pkg_name)); OZ (ObPLResolver::resolve_dblink_routine(resolve_ctx, dblink_name, db_name, pkg_name, routine_name, expr_params, routine_info), @@ -13878,7 +13881,7 @@ int ObPLResolver::resolve_routine(ObObjAccessIdent &access_ident, } else { OZ (ObPLResolver::resolve_dblink_routine_with_synonym(resolve_ctx_, static_cast(access_idxs.at(access_idxs.count()-1).var_index_), - routine_name, expr_params, routine_info)); + database_name, routine_name, expr_params, routine_info)); } if (OB_SUCC(ret) && NULL != routine_info diff --git a/src/pl/ob_pl_resolver.h b/src/pl/ob_pl_resolver.h index 84a0e6dee..e029c42a1 100644 --- a/src/pl/ob_pl_resolver.h +++ b/src/pl/ob_pl_resolver.h @@ -593,6 +593,7 @@ public: const ObIRoutineInfo *&routine_info); static int resolve_dblink_routine_with_synonym(ObPLResolveCtx &resolve_ctx, const uint64_t pkg_syn_id, + const ObString &cur_db_name, const ObString &routine_name, const common::ObIArray &expr_params, const ObIRoutineInfo *&routine_info);