diff --git a/src/pl/ob_pl_resolver.cpp b/src/pl/ob_pl_resolver.cpp index 07a5daedd4..fef3a585ca 100644 --- a/src/pl/ob_pl_resolver.cpp +++ b/src/pl/ob_pl_resolver.cpp @@ -11207,6 +11207,7 @@ int ObPLResolver::resolve_qualified_identifier(ObQualifiedName &q_name, OZ (columns.at(i).replace_access_ident_params(q_name.ref_expr_, expr)); } CK (OB_NOT_NULL(expr)); + OZ (ObRawExprUtils::set_call_in_pl(expr)); OZ (formalize_expr(*expr)); return ret; } diff --git a/src/sql/engine/expr/ob_expr_cast.cpp b/src/sql/engine/expr/ob_expr_cast.cpp index 0fbaee49c6..9728be47bf 100644 --- a/src/sql/engine/expr/ob_expr_cast.cpp +++ b/src/sql/engine/expr/ob_expr_cast.cpp @@ -439,7 +439,13 @@ int ObExprCast::calc_result_type2(ObExprResType &type, : (OB_NOT_NULL(type_ctx.get_session()) ? type_ctx.get_session()->get_actual_nls_length_semantics() : LS_BYTE)); - if (len > 0) { // cast(1 as char(10)) + if (len < 0 && !is_called_in_sql() && lib::is_oracle_mode()) { + if (dst_type.is_char() || dst_type.is_nchar()) { + type.set_full_length(OB_MAX_ORACLE_PL_CHAR_LENGTH_BYTE, length_semantics); + } else if (dst_type.is_nvarchar2() || dst_type.is_varchar()) { + type.set_full_length(OB_MAX_ORACLE_VARCHAR_LENGTH, length_semantics); + } + } else if (len > 0) { // cast(1 as char(10)) type.set_full_length(len, length_semantics); } else if (OB_FAIL(get_cast_string_len(type1, dst_type, type_ctx, len, length_semantics, collation_connection,