diff --git a/src/pl/ob_pl_resolver.cpp b/src/pl/ob_pl_resolver.cpp index 9f5fa8b71..615139cb1 100644 --- a/src/pl/ob_pl_resolver.cpp +++ b/src/pl/ob_pl_resolver.cpp @@ -169,13 +169,20 @@ int ObPLResolver::init_default_expr(ObPLFunctionAST &func_ast, const ParseNode *default_node = NULL; ObRawExpr *default_expr = NULL; ObString default_value = param.get_default_value(); + bool is_for_trigger = false; + if (resolve_ctx_.session_info_.is_for_trigger_package() + && lib::is_oracle_mode() + && ObTriggerInfo::is_trigger_body_package_id(func_ast.get_package_id())) { + is_for_trigger = true; + } OZ (ObSQLUtils::convert_sql_text_from_schema_for_resolve( resolve_ctx_.allocator_, resolve_ctx_.session_info_.get_dtc_params(), default_value)); OZ (ObRawExprUtils::parse_default_expr_from_str( default_value, resolve_ctx_.session_info_.get_charsets4parser(), resolve_ctx_.allocator_, - default_node)); + default_node, + is_for_trigger)); CK (OB_NOT_NULL(default_node)); OZ (resolve_expr(default_node, func_ast, default_expr, combine_line_and_col(default_node->stmt_loc_), true, &expected_type)); diff --git a/src/sql/resolver/expr/ob_raw_expr_util.cpp b/src/sql/resolver/expr/ob_raw_expr_util.cpp index bed4ec17f..98dd05319 100644 --- a/src/sql/resolver/expr/ob_raw_expr_util.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_util.cpp @@ -1487,7 +1487,8 @@ int ObRawExprUtils::make_raw_expr_from_str(const ObString &expr_str, } int ObRawExprUtils::parse_default_expr_from_str(const ObString &expr_str, - ObCharsets4Parser expr_str_cs_type, ObIAllocator &allocator, const ParseNode *&node) + ObCharsets4Parser expr_str_cs_type, ObIAllocator &allocator, const ParseNode *&node, + bool is_for_trigger) { int ret = OB_SUCCESS; ObSqlString sql_str; @@ -1509,6 +1510,7 @@ int ObRawExprUtils::parse_default_expr_from_str(const ObString &expr_str, (ObCharset::charset_type_by_coll(expr_str_cs_type.string_collation_) != CHARSET_UTF8MB4) : false; parse_result.connection_collation_ = expr_str_cs_type.string_collation_; parse_result.semicolon_start_col_ = INT32_MAX; + parse_result.is_for_trigger_ = is_for_trigger; if (OB_FAIL(sql_str.append_fmt("DO %.*s", expr_str.length(), expr_str.ptr()))) { LOG_WARN("failed to concat expr str", K(expr_str), K(ret)); } else if (OB_FAIL(parser.parse( diff --git a/src/sql/resolver/expr/ob_raw_expr_util.h b/src/sql/resolver/expr/ob_raw_expr_util.h index ec00ec7f3..40ec74cc4 100644 --- a/src/sql/resolver/expr/ob_raw_expr_util.h +++ b/src/sql/resolver/expr/ob_raw_expr_util.h @@ -217,7 +217,8 @@ public: static int parse_default_expr_from_str(const common::ObString &expr_str, ObCharsets4Parser expr_str_cs_type, common::ObIAllocator &allocator, - const ParseNode *&node); + const ParseNode *&node, + bool is_for_trigger = false); static int parse_expr_list_node_from_str(const common::ObString &expr_str, ObCharsets4Parser expr_str_cs_type, common::ObIAllocator &allocator,