diff --git a/src/sql/resolver/dml/ob_dml_stmt.cpp b/src/sql/resolver/dml/ob_dml_stmt.cpp index 19de38fd4c..86a2dc8b12 100644 --- a/src/sql/resolver/dml/ob_dml_stmt.cpp +++ b/src/sql/resolver/dml/ob_dml_stmt.cpp @@ -1759,6 +1759,7 @@ int ObDMLStmt::remove_const_exec_param(ObDMLStmt *stmt, ObSQLSessionInfo *sessio { int ret = OB_SUCCESS; ObSEArray exprs; + ObSEArray child_stmts; is_happened = false; if (OB_ISNULL(stmt) || OB_ISNULL(session_info)) { ret = OB_ERR_UNEXPECTED; @@ -1785,6 +1786,26 @@ int ObDMLStmt::remove_const_exec_param(ObDMLStmt *stmt, ObSQLSessionInfo *sessio LOG_TRACE("succeed to remove const exec param", K(ret), K(tmp_happened), K(*expr)); } } + if (OB_FAIL(ret)) { + } else if (OB_FAIL(stmt->get_child_stmts(child_stmts))) { + LOG_WARN("failed to get child stmts", K(ret)); + } else { + for (int64_t i = 0; OB_SUCC(ret) && i < child_stmts.count(); ++i) { + bool tmp_happened = false; + ObSelectStmt* child_stmt = NULL; + if (OB_ISNULL(child_stmt = child_stmts.at(i))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("stmt is null", K(ret), K(child_stmt)); + } else if (OB_FAIL(SMART_CALL(remove_const_exec_param(child_stmt, + session_info, + tmp_happened)))) { + LOG_WARN("failed to remove const exec param", K(ret)); + } else { + is_happened |= tmp_happened; + } + } + } + return ret; }