diff --git a/src/pl/ob_pl_resolver.cpp b/src/pl/ob_pl_resolver.cpp index eb5cab01a3..e6ceec154b 100644 --- a/src/pl/ob_pl_resolver.cpp +++ b/src/pl/ob_pl_resolver.cpp @@ -6775,6 +6775,16 @@ int ObPLResolver::convert_cursor_actual_params( convert_expr)); OZ (func.add_expr(convert_expr)); OX (idx = func.get_exprs().count() - 1); + } else if (pl_data_type.is_cursor_type()) { + if (convert_expr->get_result_type().get_extend_type() != PL_CURSOR_TYPE + && convert_expr->get_result_type().get_extend_type() != PL_REF_CURSOR_TYPE) { + ret = OB_ERR_INVALID_TYPE_FOR_OP; + LOG_WARN("PLS-00382: expression is of wrong type", + K(ret), K(pl_data_type.is_obj_type()), KPC(convert_expr), + K(convert_expr->get_result_type().get_obj_meta().get_type()), + K(pl_data_type.get_user_type_id()), + K(convert_expr->get_result_type().get_udt_id())); + } } else if (pl_data_type.get_user_type_id() != convert_expr->get_result_type().get_udt_id()) { bool is_compatible = false; CK (OB_NOT_NULL(current_block_)); diff --git a/src/sql/engine/expr/ob_expr_get_package_var.cpp b/src/sql/engine/expr/ob_expr_get_package_var.cpp index bd9c8f0bac..396b6a85a2 100644 --- a/src/sql/engine/expr/ob_expr_get_package_var.cpp +++ b/src/sql/engine/expr/ob_expr_get_package_var.cpp @@ -110,6 +110,8 @@ int ObExprGetPackageVar::calc_result_typeN(ObExprResType &type, type.set_collation_type(result_type->get_collation_type()); type.set_collation_level(result_type->get_collation_level()); type.set_scale(result_type->get_scale()); + } else if (ob_is_extend(result_type->get_type())) { + type.set_extend_type(result_type->get_extend_type()); } return ret; }