This is an automated email from the ASF dual-hosted git repository.

chengzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 1a45cb83595 Refactor oracle multi table insert statement visit logic 
and modify related test case (#28435)
1a45cb83595 is described below

commit 1a45cb83595b5aa139ebfd65b322ab22960f15f7
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Sep 14 18:00:35 2023 +0800

    Refactor oracle multi table insert statement visit logic and modify related 
test case (#28435)
---
 .../statement/dml/InsertStatementBinder.java       |   4 +-
 .../binder/statement/dml/MergeStatementBinder.java |   4 +-
 .../statement/type/OracleDMLStatementVisitor.java  |  59 +++---
 .../handler/dml/InsertStatementHandler.java        |  70 ++++++-
 .../MultiTableConditionalIntoElseSegment.java}     |   9 +-
 .../insert/MultiTableConditionalIntoSegment.java}  |  23 ++-
 .../MultiTableConditionalIntoThenSegment.java}     |   9 +-
 .../MultiTableConditionalIntoWhenThenSegment.java} |  15 +-
 .../insert/MultiTableInsertIntoSegment.java}       |   6 +-
 .../oracle/insert/MultiTableInsertType.java}       |  22 +--
 .../oracle/dml/OracleInsertStatement.java          |  38 +++-
 .../handler/dml/InsertStatementHandlerTest.java    |  20 +-
 .../MultiTableConditionalIntoClauseAssert.java     |  63 +++++++
 ...ultiTableConditionalIntoElseSegmentAssert.java} |  19 +-
 ...ultiTableConditionalIntoThenSegmentAssert.java} |  19 +-
 ....java => MultiTableInsertIntoClauseAssert.java} |  16 +-
 .../statement/dml/impl/InsertStatementAssert.java  |  46 ++++-
 ...> ExpectedMultiTableConditionalIntoClause.java} |  14 +-
 ...pectedMultiTableConditionalIntoElseClause.java} |   6 +-
 ...pectedMultiTableConditionalIntoThenClause.java} |   6 +-
 ...edMultiTableConditionalIntoWhenThenClause.java} |  17 +-
 ...ava => ExpectedMultiTableInsertIntoClause.java} |   6 +-
 ...ment.java => ExpectedMultiTableInsertType.java} |  15 +-
 .../statement/dml/InsertStatementTestCase.java     |  16 +-
 .../parser/src/main/resources/case/dml/insert.xml  | 201 ++++++++++++++++-----
 .../main/resources/sql/supported/dml/insert.xml    |   4 +-
 26 files changed, 516 insertions(+), 211 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
index 08719ac64bf..8d7f8eedf0a 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
@@ -67,7 +67,9 @@ public final class InsertStatementBinder implements 
SQLStatementBinder<InsertSta
         
InsertStatementHandler.getSetAssignmentSegment(sqlStatement).ifPresent(optional 
-> InsertStatementHandler.setSetAssignmentSegment(result, optional));
         InsertStatementHandler.getWithSegment(sqlStatement).ifPresent(optional 
-> InsertStatementHandler.setWithSegment(result, optional));
         
InsertStatementHandler.getOutputSegment(sqlStatement).ifPresent(optional -> 
InsertStatementHandler.setOutputSegment(result, optional));
-        
InsertStatementHandler.getInsertMultiTableElementSegment(sqlStatement).ifPresent(optional
 -> InsertStatementHandler.setInsertMultiTableElementSegment(result, optional));
+        
InsertStatementHandler.getMultiTableInsertType(sqlStatement).ifPresent(optional 
-> InsertStatementHandler.setMultiTableInsertType(result, optional));
+        
InsertStatementHandler.getMultiTableInsertIntoSegment(sqlStatement).ifPresent(optional
 -> InsertStatementHandler.setMultiTableInsertIntoSegment(result, optional));
+        
InsertStatementHandler.getMultiTableConditionalIntoSegment(sqlStatement).ifPresent(optional
 -> InsertStatementHandler.setMultiTableConditionalIntoSegment(result, 
optional));
         
InsertStatementHandler.getReturningSegment(sqlStatement).ifPresent(optional -> 
InsertStatementHandler.setReturningSegment(result, optional));
         
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
         result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
index 6e3b327dcd4..7a38ca7e139 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
@@ -110,7 +110,9 @@ public final class MergeStatementBinder implements 
SQLStatementBinder<MergeState
         
InsertStatementHandler.getSetAssignmentSegment(sqlStatement).ifPresent(optional 
-> InsertStatementHandler.setSetAssignmentSegment(result, optional));
         InsertStatementHandler.getWithSegment(sqlStatement).ifPresent(optional 
-> InsertStatementHandler.setWithSegment(result, optional));
         
InsertStatementHandler.getOutputSegment(sqlStatement).ifPresent(optional -> 
InsertStatementHandler.setOutputSegment(result, optional));
-        
InsertStatementHandler.getInsertMultiTableElementSegment(sqlStatement).ifPresent(optional
 -> InsertStatementHandler.setInsertMultiTableElementSegment(result, optional));
+        
InsertStatementHandler.getMultiTableInsertType(sqlStatement).ifPresent(optional 
-> InsertStatementHandler.setMultiTableInsertType(result, optional));
+        
InsertStatementHandler.getMultiTableInsertIntoSegment(sqlStatement).ifPresent(optional
 -> InsertStatementHandler.setMultiTableInsertIntoSegment(result, optional));
+        
InsertStatementHandler.getMultiTableConditionalIntoSegment(sqlStatement).ifPresent(optional
 -> InsertStatementHandler.setMultiTableConditionalIntoSegment(result, 
optional));
         
InsertStatementHandler.getReturningSegment(sqlStatement).ifPresent(optional -> 
InsertStatementHandler.setReturningSegment(result, optional));
         
InsertStatementHandler.getWhereSegment(sqlStatement).ifPresent(optional -> 
InsertStatementHandler.setWhereSegment(result,
                 WhereSegmentBinder.bind(optional, 
insertStatementBinderContext, targetTableBinderContexts, 
sourceTableBinderContexts)));
diff --git 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
index c97e0ddf73e..ae687051fb3 100644
--- 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
+++ 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
@@ -152,7 +152,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.Loc
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvailable;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ModelSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
@@ -168,6 +167,12 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.BooleanLiteralValue;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoElseSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoThenSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoWhenThenSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertType;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleDeleteStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleInsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleLockTableStatement;
@@ -316,9 +321,16 @@ public final class OracleDMLStatementVisitor extends 
OracleStatementVisitor impl
     @Override
     public ASTNode visitInsertMultiTable(final InsertMultiTableContext ctx) {
         OracleInsertStatement result = new OracleInsertStatement();
-        result.setInsertMultiTableElementSegment(null == 
ctx.conditionalInsertClause()
-                ? createInsertMultiTableElementSegment(ctx.multiTableElement())
-                : (InsertMultiTableElementSegment) 
visit(ctx.conditionalInsertClause()));
+        result.setMultiTableInsertType(null != ctx.conditionalInsertClause() 
&& null != ctx.conditionalInsertClause().FIRST() ? MultiTableInsertType.FIRST : 
MultiTableInsertType.ALL);
+        List<MultiTableElementContext> multiTableElementContexts = 
ctx.multiTableElement();
+        if (null != multiTableElementContexts && 
!multiTableElementContexts.isEmpty()) {
+            MultiTableInsertIntoSegment multiTableInsertIntoSegment = new 
MultiTableInsertIntoSegment(
+                    
multiTableElementContexts.get(0).getStart().getStartIndex(), 
multiTableElementContexts.get(multiTableElementContexts.size() - 
1).getStop().getStopIndex());
+            
multiTableInsertIntoSegment.getInsertStatements().addAll(createInsertIntoSegments(multiTableElementContexts));
+            result.setMultiTableInsertIntoSegment(multiTableInsertIntoSegment);
+        } else {
+            
result.setMultiTableConditionalIntoSegment((MultiTableConditionalIntoSegment) 
visit(ctx.conditionalInsertClause()));
+        }
         OracleSelectStatement subquery = (OracleSelectStatement) 
visit(ctx.selectSubquery());
         SubquerySegment subquerySegment = new 
SubquerySegment(ctx.selectSubquery().start.getStartIndex(), 
ctx.selectSubquery().stop.getStopIndex(), subquery);
         result.setInsertSelect(subquerySegment);
@@ -326,13 +338,11 @@ public final class OracleDMLStatementVisitor extends 
OracleStatementVisitor impl
         return result;
     }
     
-    private InsertMultiTableElementSegment 
createInsertMultiTableElementSegment(final List<MultiTableElementContext> ctx) {
-        Collection<OracleInsertStatement> insertStatements = new 
LinkedList<>();
+    private Collection<InsertStatement> createInsertIntoSegments(final 
List<MultiTableElementContext> ctx) {
+        Collection<InsertStatement> result = new LinkedList<>();
         for (MultiTableElementContext each : ctx) {
-            insertStatements.add((OracleInsertStatement) visit(each));
+            result.add((OracleInsertStatement) visit(each));
         }
-        InsertMultiTableElementSegment result = new 
InsertMultiTableElementSegment(ctx.get(0).getStart().getStartIndex(), 
ctx.get(ctx.size() - 1).getStop().getStopIndex());
-        result.getInsertStatements().addAll(insertStatements);
         return result;
     }
     
@@ -441,32 +451,29 @@ public final class OracleDMLStatementVisitor extends 
OracleStatementVisitor impl
     
     @Override
     public ASTNode visitConditionalInsertClause(final 
ConditionalInsertClauseContext ctx) {
-        Collection<OracleInsertStatement> insertStatements = new 
LinkedList<>();
+        Collection<MultiTableConditionalIntoWhenThenSegment> whenThenSegments 
= new LinkedList<>();
         for (ConditionalInsertWhenPartContext each : 
ctx.conditionalInsertWhenPart()) {
-            
insertStatements.addAll(createInsertStatementsFromConditionalInsertWhen(each));
+            whenThenSegments.add((MultiTableConditionalIntoWhenThenSegment) 
visit(each));
         }
+        MultiTableConditionalIntoSegment result = new 
MultiTableConditionalIntoSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex());
+        result.getWhenThenSegments().addAll(whenThenSegments);
         if (null != ctx.conditionalInsertElsePart()) {
-            
insertStatements.addAll(createInsertStatementsFromConditionalInsertElse(ctx.conditionalInsertElsePart()));
+            result.setElseSegment((MultiTableConditionalIntoElseSegment) 
visit(ctx.conditionalInsertElsePart()));
         }
-        InsertMultiTableElementSegment result = new 
InsertMultiTableElementSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex());
-        result.getInsertStatements().addAll(insertStatements);
         return result;
     }
     
-    private Collection<OracleInsertStatement> 
createInsertStatementsFromConditionalInsertWhen(final 
ConditionalInsertWhenPartContext ctx) {
-        Collection<OracleInsertStatement> result = new LinkedList<>();
-        for (MultiTableElementContext each : ctx.multiTableElement()) {
-            result.add((OracleInsertStatement) visit(each));
-        }
-        return result;
+    @Override
+    public ASTNode visitConditionalInsertWhenPart(final 
ConditionalInsertWhenPartContext ctx) {
+        List<MultiTableElementContext> multiTableElementContexts = 
ctx.multiTableElement();
+        MultiTableConditionalIntoThenSegment thenSegment = new 
MultiTableConditionalIntoThenSegment(multiTableElementContexts.get(0).start.getStartIndex(),
+                multiTableElementContexts.get(multiTableElementContexts.size() 
- 1).stop.getStopIndex(), createInsertIntoSegments(multiTableElementContexts));
+        return new 
MultiTableConditionalIntoWhenThenSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), (ExpressionSegment) visit(ctx.expr()), thenSegment);
     }
     
-    private Collection<OracleInsertStatement> 
createInsertStatementsFromConditionalInsertElse(final 
ConditionalInsertElsePartContext ctx) {
-        Collection<OracleInsertStatement> result = new LinkedList<>();
-        for (MultiTableElementContext each : ctx.multiTableElement()) {
-            result.add((OracleInsertStatement) visit(each));
-        }
-        return result;
+    @Override
+    public ASTNode visitConditionalInsertElsePart(final 
ConditionalInsertElsePartContext ctx) {
+        return new 
MultiTableConditionalIntoElseSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), createInsertIntoSegments(ctx.multiTableElement()));
     }
     
     @Override
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
index 215bf7ecdd1..38f054b30b9 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
@@ -23,11 +23,13 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.ReturningSegm
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.handler.SQLStatementHandler;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertType;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.dml.OpenGaussInsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleInsertStatement;
@@ -164,27 +166,77 @@ public final class InsertStatementHandler implements 
SQLStatementHandler {
     }
     
     /**
-     * Get insert multi table element segment.
+     * Get multi table insert type.
      *
      * @param insertStatement insert statement
-     * @return insert multi table element segment
+     * @return multi table insert type
      */
-    public static Optional<InsertMultiTableElementSegment> 
getInsertMultiTableElementSegment(final InsertStatement insertStatement) {
+    public static Optional<MultiTableInsertType> getMultiTableInsertType(final 
InsertStatement insertStatement) {
         if (insertStatement instanceof OracleInsertStatement) {
-            return ((OracleInsertStatement) 
insertStatement).getInsertMultiTableElementSegment();
+            return ((OracleInsertStatement) 
insertStatement).getMultiTableInsertType();
         }
         return Optional.empty();
     }
     
     /**
-     * Set insert multi table element segment.
+     * Set multi table insert type.
+     *
+     * @param insertStatement insert into statement
+     * @param multiTableInsertType multi table insert type
+     */
+    public static void setMultiTableInsertType(final InsertStatement 
insertStatement, final MultiTableInsertType multiTableInsertType) {
+        if (insertStatement instanceof OracleInsertStatement) {
+            ((OracleInsertStatement) 
insertStatement).setMultiTableInsertType(multiTableInsertType);
+        }
+    }
+    
+    /**
+     * Get multi table insert into segment.
+     *
+     * @param insertStatement insert statement
+     * @return multi table insert into segment
+     */
+    public static Optional<MultiTableInsertIntoSegment> 
getMultiTableInsertIntoSegment(final InsertStatement insertStatement) {
+        if (insertStatement instanceof OracleInsertStatement) {
+            return ((OracleInsertStatement) 
insertStatement).getMultiTableInsertIntoSegment();
+        }
+        return Optional.empty();
+    }
+    
+    /**
+     * Set multi table insert into segment.
      * 
+     * @param insertStatement insert into statement
+     * @param multiTableInsertIntoSegment multi table insert into segment
+     */
+    public static void setMultiTableInsertIntoSegment(final InsertStatement 
insertStatement, final MultiTableInsertIntoSegment multiTableInsertIntoSegment) 
{
+        if (insertStatement instanceof OracleInsertStatement) {
+            ((OracleInsertStatement) 
insertStatement).setMultiTableInsertIntoSegment(multiTableInsertIntoSegment);
+        }
+    }
+    
+    /**
+     * Get multi table conditional into segment.
+     *
      * @param insertStatement insert statement
-     * @param insertMultiTableElementSegment insert multi table element segment
+     * @return multi table conditional into segment
+     */
+    public static Optional<MultiTableConditionalIntoSegment> 
getMultiTableConditionalIntoSegment(final InsertStatement insertStatement) {
+        if (insertStatement instanceof OracleInsertStatement) {
+            return ((OracleInsertStatement) 
insertStatement).getMultiTableConditionalIntoSegment();
+        }
+        return Optional.empty();
+    }
+    
+    /**
+     * Set multi table conditional into segment.
+     *
+     * @param insertStatement insert into statement
+     * @param multiTableConditionalIntoSegment multi table conditional into 
segment
      */
-    public static void setInsertMultiTableElementSegment(final InsertStatement 
insertStatement, final InsertMultiTableElementSegment 
insertMultiTableElementSegment) {
+    public static void setMultiTableConditionalIntoSegment(final 
InsertStatement insertStatement, final MultiTableConditionalIntoSegment 
multiTableConditionalIntoSegment) {
         if (insertStatement instanceof OracleInsertStatement) {
-            ((OracleInsertStatement) 
insertStatement).setInsertMultiTableElementSegment(insertMultiTableElementSegment);
+            ((OracleInsertStatement) 
insertStatement).setMultiTableConditionalIntoSegment(multiTableConditionalIntoSegment);
         }
     }
     
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoElseSegment.java
similarity index 79%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoElseSegment.java
index 741444807a9..b915e477059 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoElseSegment.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.segment.generic;
+package org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -23,18 +23,17 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
 
 import java.util.Collection;
-import java.util.LinkedList;
 
 /**
- * Insert multi table element segment.
+ * Multi table conditional into else segment.
  */
 @RequiredArgsConstructor
 @Getter
-public final class InsertMultiTableElementSegment implements SQLSegment {
+public final class MultiTableConditionalIntoElseSegment implements SQLSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<InsertStatement> insertStatements = new 
LinkedList<>();
+    private final Collection<InsertStatement> insertStatements;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoSegment.java
similarity index 63%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoSegment.java
index 741444807a9..23b7ef19c8a 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoSegment.java
@@ -15,26 +15,39 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.segment.generic;
+package org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
 
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.Optional;
 
 /**
- * Insert multi table element segment.
+ * Multi table conditional into segment.
  */
 @RequiredArgsConstructor
 @Getter
-public final class InsertMultiTableElementSegment implements SQLSegment {
+public final class MultiTableConditionalIntoSegment implements SQLSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<InsertStatement> insertStatements = new 
LinkedList<>();
+    private final Collection<MultiTableConditionalIntoWhenThenSegment> 
whenThenSegments = new LinkedList<>();
+    
+    @Setter
+    private MultiTableConditionalIntoElseSegment elseSegment;
+    
+    /**
+     * Get else segment.
+     * 
+     * @return else segment
+     */
+    public Optional<MultiTableConditionalIntoElseSegment> getElseSegment() {
+        return Optional.ofNullable(elseSegment);
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoThenSegment.java
similarity index 79%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoThenSegment.java
index 741444807a9..f324f66e0a5 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoThenSegment.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.segment.generic;
+package org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -23,18 +23,17 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
 
 import java.util.Collection;
-import java.util.LinkedList;
 
 /**
- * Insert multi table element segment.
+ * Multi table conditional into then segment.
  */
 @RequiredArgsConstructor
 @Getter
-public final class InsertMultiTableElementSegment implements SQLSegment {
+public final class MultiTableConditionalIntoThenSegment implements SQLSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<InsertStatement> insertStatements = new 
LinkedList<>();
+    private final Collection<InsertStatement> insertStatements;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoWhenThenSegment.java
similarity index 71%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoWhenThenSegment.java
index 741444807a9..58c573aa189 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableConditionalIntoWhenThenSegment.java
@@ -15,26 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.segment.generic;
+package org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
-
-import java.util.Collection;
-import java.util.LinkedList;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 
 /**
- * Insert multi table element segment.
+ * Multi table conditional into when then segment.
  */
 @RequiredArgsConstructor
 @Getter
-public final class InsertMultiTableElementSegment implements SQLSegment {
+public final class MultiTableConditionalIntoWhenThenSegment implements 
SQLSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<InsertStatement> insertStatements = new 
LinkedList<>();
+    private final ExpressionSegment whenSegment;
+    
+    private final MultiTableConditionalIntoThenSegment thenSegment;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableInsertIntoSegment.java
similarity index 87%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableInsertIntoSegment.java
index 741444807a9..5cd63f71a05 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableInsertIntoSegment.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.segment.generic;
+package org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -26,11 +26,11 @@ import java.util.Collection;
 import java.util.LinkedList;
 
 /**
- * Insert multi table element segment.
+ * Multi table insert into segment.
  */
 @RequiredArgsConstructor
 @Getter
-public final class InsertMultiTableElementSegment implements SQLSegment {
+public final class MultiTableInsertIntoSegment implements SQLSegment {
     
     private final int startIndex;
     
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableInsertType.java
similarity index 55%
rename from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
rename to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableInsertType.java
index 741444807a9..edc20f4947f 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/InsertMultiTableElementSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/segment/oracle/insert/MultiTableInsertType.java
@@ -15,26 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.segment.generic;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
-
-import java.util.Collection;
-import java.util.LinkedList;
+package org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert;
 
 /**
- * Insert multi table element segment.
+ * Multi table insert type.
  */
-@RequiredArgsConstructor
-@Getter
-public final class InsertMultiTableElementSegment implements SQLSegment {
-    
-    private final int startIndex;
-    
-    private final int stopIndex;
+public enum MultiTableInsertType {
     
-    private final Collection<InsertStatement> insertStatements = new 
LinkedList<>();
+    ALL, FIRST
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleInsertStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleInsertStatement.java
index c59d28d4c93..8c21e4b5f00 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleInsertStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleInsertStatement.java
@@ -17,10 +17,13 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml;
 
+import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertType;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
 
 import java.util.Optional;
@@ -28,20 +31,43 @@ import java.util.Optional;
 /**
  * Oracle insert statement.
  */
+@Getter
 @Setter
 public final class OracleInsertStatement extends InsertStatement implements 
OracleStatement {
     
-    private InsertMultiTableElementSegment insertMultiTableElementSegment;
+    private MultiTableInsertType multiTableInsertType;
+    
+    private MultiTableInsertIntoSegment multiTableInsertIntoSegment;
+    
+    private MultiTableConditionalIntoSegment multiTableConditionalIntoSegment;
     
     private WhereSegment where;
     
     /**
-     * Get insert multi table element segment.
+     * Get multi table insert type.
+     *
+     * @return multi table insert type
+     */
+    public Optional<MultiTableInsertType> getMultiTableInsertType() {
+        return Optional.ofNullable(multiTableInsertType);
+    }
+    
+    /**
+     * Get multi table insert into segment.
+     *
+     * @return multi table insert into segment
+     */
+    public Optional<MultiTableInsertIntoSegment> 
getMultiTableInsertIntoSegment() {
+        return Optional.ofNullable(multiTableInsertIntoSegment);
+    }
+    
+    /**
+     * Get multi table conditional into segment.
      *
-     * @return insert select segment
+     * @return multi table conditional into segment
      */
-    public Optional<InsertMultiTableElementSegment> 
getInsertMultiTableElementSegment() {
-        return Optional.ofNullable(insertMultiTableElementSegment);
+    public Optional<MultiTableConditionalIntoSegment> 
getMultiTableConditionalIntoSegment() {
+        return Optional.ofNullable(multiTableConditionalIntoSegment);
     }
     
     /**
diff --git 
a/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
 
b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
index c105d339bd6..83b9afc49ca 100644
--- 
a/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
+++ 
b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml;
 
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertIntoSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
@@ -155,19 +155,19 @@ class InsertStatementHandlerTest {
     @Test
     void assertGetInsertMultiTableElementSegmentForOracle() {
         OracleInsertStatement insertStatement = new OracleInsertStatement();
-        insertStatement.setInsertMultiTableElementSegment(new 
InsertMultiTableElementSegment(0, 0));
-        Optional<InsertMultiTableElementSegment> 
insertMultiTableElementSegment = 
InsertStatementHandler.getInsertMultiTableElementSegment(insertStatement);
+        insertStatement.setMultiTableInsertIntoSegment(new 
MultiTableInsertIntoSegment(0, 0));
+        Optional<MultiTableInsertIntoSegment> insertMultiTableElementSegment = 
InsertStatementHandler.getMultiTableInsertIntoSegment(insertStatement);
         assertTrue(insertMultiTableElementSegment.isPresent());
-        assertThat(insertMultiTableElementSegment.get(), 
is(insertStatement.getInsertMultiTableElementSegment().get()));
-        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
SQLServerInsertStatement()).isPresent());
+        assertThat(insertMultiTableElementSegment.get(), 
is(insertStatement.getMultiTableInsertIntoSegment().get()));
+        assertFalse(InsertStatementHandler.getMultiTableInsertIntoSegment(new 
SQLServerInsertStatement()).isPresent());
     }
     
     @Test
     void assertGetInsertMultiTableElementSegmentForOtherDatabases() {
-        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
MySQLInsertStatement()).isPresent());
-        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
OpenGaussInsertStatement()).isPresent());
-        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
PostgreSQLInsertStatement()).isPresent());
-        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
SQL92InsertStatement()).isPresent());
-        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
SQLServerInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getMultiTableInsertIntoSegment(new 
MySQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getMultiTableInsertIntoSegment(new 
OpenGaussInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getMultiTableInsertIntoSegment(new 
PostgreSQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getMultiTableInsertIntoSegment(new 
SQL92InsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getMultiTableInsertIntoSegment(new 
SQLServerInsertStatement()).isPresent());
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoClauseAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoClauseAssert.java
new file mode 100644
index 00000000000..712f9fe1083
--- /dev/null
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoClauseAssert.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoWhenThenSegment;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.expression.ExpressionAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedMultiTableConditionalIntoClause;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Multi table conditional into assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class MultiTableConditionalIntoClauseAssert {
+    
+    /**
+     * Assert actual multi table conditional into segment is correct with 
expected multi table conditional into segment.
+     *
+     * @param assertContext assert context
+     * @param actual actual multi table conditional into segment
+     * @param expected expected multi table conditional into segment
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MultiTableConditionalIntoSegment actual, final 
ExpectedMultiTableConditionalIntoClause expected) {
+        assertThat(assertContext.getText("Conditional into when then segment 
size assertion error: "), actual.getWhenThenSegments().size(), 
is(expected.getConditionalIntoWhenThenClauses().size()));
+        int index = 0;
+        for (MultiTableConditionalIntoWhenThenSegment each : 
actual.getWhenThenSegments()) {
+            ExpressionAssert.assertExpression(assertContext, 
each.getWhenSegment(), 
expected.getConditionalIntoWhenThenClauses().get(index).getWhenClause());
+            MultiTableConditionalIntoThenSegmentAssert.assertIs(assertContext, 
each.getThenSegment(), 
expected.getConditionalIntoWhenThenClauses().get(index).getThenClause());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+            index++;
+        }
+        if (null == expected.getElseClause()) {
+            assertFalse(actual.getElseSegment().isPresent(), 
assertContext.getText("Actual multi table conditional into else segment should 
not exist."));
+        } else {
+            assertTrue(actual.getElseSegment().isPresent(), 
assertContext.getText("Actual multi table conditional into else segment should 
exist."));
+            MultiTableConditionalIntoElseSegmentAssert.assertIs(assertContext, 
actual.getElseSegment().get(), expected.getElseClause());
+        }
+    }
+}
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoElseSegmentAssert.java
similarity index 68%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoElseSegmentAssert.java
index d9d211da26f..af4102ec054 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoElseSegmentAssert.java
@@ -19,31 +19,32 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.in
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoElseSegment;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.InsertStatementAssert;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertMultiTableElement;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedMultiTableConditionalIntoElseClause;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
- * Insert multi table element assert.
+ * Multi table conditional into else segment assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class InsertMultiTableElementAssert {
+public final class MultiTableConditionalIntoElseSegmentAssert {
     
     /**
-     * Assert actual insert multi table element segment is correct with 
expected multi table element.
+     * Assert actual multi table conditional into else segment is correct with 
expected multi table conditional into else segment.
      *
      * @param assertContext assert context
-     * @param actual actual insert multi table element
-     * @param expected expected insert multi table element
+     * @param actual actual multi table conditional into else segment
+     * @param expected expected multi table conditional into else segment
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final InsertMultiTableElementSegment actual, final 
ExpectedInsertMultiTableElement expected) {
-        assertThat(assertContext.getText("Insert values size assertion error: 
"), actual.getInsertStatements().size(), 
is(expected.getInsertTestCases().size()));
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MultiTableConditionalIntoElseSegment actual, final 
ExpectedMultiTableConditionalIntoElseClause expected) {
+        assertThat(assertContext.getText("Multi table conditional into else 
segment' insert values size assertion error: "), 
actual.getInsertStatements().size(),
+                is(expected.getInsertTestCases().size()));
         int count = 0;
         for (InsertStatement each : actual.getInsertStatements()) {
             InsertStatementAssert.assertIs(assertContext, each, 
expected.getInsertTestCases().get(count));
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoThenSegmentAssert.java
similarity index 68%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoThenSegmentAssert.java
index d9d211da26f..9b02954dd7e 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableConditionalIntoThenSegmentAssert.java
@@ -19,31 +19,32 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.in
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoThenSegment;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.InsertStatementAssert;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertMultiTableElement;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedMultiTableConditionalIntoThenClause;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
- * Insert multi table element assert.
+ * Multi table conditional into then segment assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class InsertMultiTableElementAssert {
+public final class MultiTableConditionalIntoThenSegmentAssert {
     
     /**
-     * Assert actual insert multi table element segment is correct with 
expected multi table element.
+     * Assert actual multi table conditional into then segment is correct with 
expected multi table conditional into then segment.
      *
      * @param assertContext assert context
-     * @param actual actual insert multi table element
-     * @param expected expected insert multi table element
+     * @param actual actual multi table conditional into then segment
+     * @param expected expected multi table conditional into then segment
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final InsertMultiTableElementSegment actual, final 
ExpectedInsertMultiTableElement expected) {
-        assertThat(assertContext.getText("Insert values size assertion error: 
"), actual.getInsertStatements().size(), 
is(expected.getInsertTestCases().size()));
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MultiTableConditionalIntoThenSegment actual, final 
ExpectedMultiTableConditionalIntoThenClause expected) {
+        assertThat(assertContext.getText("Multi table conditional into then 
segment' insert values size assertion error: "), 
actual.getInsertStatements().size(),
+                is(expected.getInsertTestCases().size()));
         int count = 0;
         for (InsertStatement each : actual.getInsertStatements()) {
             InsertStatementAssert.assertIs(assertContext, each, 
expected.getInsertTestCases().get(count));
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableInsertIntoClauseAssert.java
similarity index 78%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
rename to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableInsertIntoClauseAssert.java
index d9d211da26f..c39c3cc4860 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/MultiTableInsertIntoClauseAssert.java
@@ -19,30 +19,30 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.in
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertIntoSegment;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.InsertStatementAssert;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertMultiTableElement;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedMultiTableInsertIntoClause;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
- * Insert multi table element assert.
+ * Multi table insert into assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class InsertMultiTableElementAssert {
+public final class MultiTableInsertIntoClauseAssert {
     
     /**
-     * Assert actual insert multi table element segment is correct with 
expected multi table element.
+     * Assert actual multi table insert into segment is correct with expected 
multi table insert into segment.
      *
      * @param assertContext assert context
-     * @param actual actual insert multi table element
-     * @param expected expected insert multi table element
+     * @param actual actual multi table insert into segment
+     * @param expected expected multi table insert into segment
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final InsertMultiTableElementSegment actual, final 
ExpectedInsertMultiTableElement expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MultiTableInsertIntoSegment actual, final 
ExpectedMultiTableInsertIntoClause expected) {
         assertThat(assertContext.getText("Insert values size assertion error: 
"), actual.getInsertStatements().size(), 
is(expected.getInsertTestCases().size()));
         int count = 0;
         for (InsertStatement each : actual.getInsertStatements()) {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/InsertStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/InsertStatementAssert.java
index 16c18f66d73..2cdb42d37a1 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/InsertStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/InsertStatementAssert.java
@@ -22,15 +22,18 @@ import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.ReturningSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.InsertStatementHandler;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableConditionalIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertIntoSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.insert.MultiTableInsertType;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert.InsertColumnsClauseAssert;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert.InsertMultiTableElementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert.InsertValuesClauseAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert.MultiTableConditionalIntoClauseAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert.MultiTableInsertIntoClauseAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert.OnDuplicateKeyColumnsAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.output.OutputClauseAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.returning.ReturningClauseAssert;
@@ -41,6 +44,8 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 
 import java.util.Optional;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -67,7 +72,9 @@ public final class InsertStatementAssert {
         assertOnDuplicateKeyColumns(assertContext, actual, expected);
         assertWithClause(assertContext, actual, expected);
         assertOutputClause(assertContext, actual, expected);
-        assertInsertMultiTableElement(assertContext, actual, expected);
+        assertMultiTableInsertType(assertContext, actual, expected);
+        assertMultiTableInsertIntoClause(assertContext, actual, expected);
+        assertMultiTableConditionalIntoClause(assertContext, actual, expected);
         assertReturningClause(assertContext, actual, expected);
     }
     
@@ -146,13 +153,34 @@ public final class InsertStatementAssert {
         }
     }
     
-    private static void assertInsertMultiTableElement(final 
SQLCaseAssertContext assertContext, final InsertStatement actual, final 
InsertStatementTestCase expected) {
-        Optional<InsertMultiTableElementSegment> insertTableElementSegment = 
InsertStatementHandler.getInsertMultiTableElementSegment(actual);
-        if (null == expected.getInsertTableElement()) {
-            assertFalse(insertTableElementSegment.isPresent(), 
assertContext.getText("Actual insert multi table element segment should not 
exist."));
+    private static void assertMultiTableInsertType(final SQLCaseAssertContext 
assertContext, final InsertStatement actual, final InsertStatementTestCase 
expected) {
+        Optional<MultiTableInsertType> multiTableInsertType = 
InsertStatementHandler.getMultiTableInsertType(actual);
+        if (null == expected.getMultiTableInsertType()) {
+            assertFalse(multiTableInsertType.isPresent(), 
assertContext.getText("Actual multi table insert type should not exist."));
         } else {
-            assertTrue(insertTableElementSegment.isPresent(), 
assertContext.getText("Actual insert multi table element segment should 
exist."));
-            InsertMultiTableElementAssert.assertIs(assertContext, 
insertTableElementSegment.get(), expected.getInsertTableElement());
+            assertTrue(multiTableInsertType.isPresent(), 
assertContext.getText("Actual multi table insert type should exist."));
+            assertThat(assertContext.getText(String.format("`%s`'s 
multiTableInsertType assertion error: ", actual.getClass().getSimpleName())), 
multiTableInsertType.get().name(),
+                    
is(expected.getMultiTableInsertType().getMultiTableInsertType()));
+        }
+    }
+    
+    private static void assertMultiTableInsertIntoClause(final 
SQLCaseAssertContext assertContext, final InsertStatement actual, final 
InsertStatementTestCase expected) {
+        Optional<MultiTableInsertIntoSegment> multiTableInsertIntoSegment = 
InsertStatementHandler.getMultiTableInsertIntoSegment(actual);
+        if (null == expected.getMultiTableInsertInto()) {
+            assertFalse(multiTableInsertIntoSegment.isPresent(), 
assertContext.getText("Actual multi table insert into segment should not 
exist."));
+        } else {
+            assertTrue(multiTableInsertIntoSegment.isPresent(), 
assertContext.getText("Actual multi table insert into segment should exist."));
+            MultiTableInsertIntoClauseAssert.assertIs(assertContext, 
multiTableInsertIntoSegment.get(), expected.getMultiTableInsertInto());
+        }
+    }
+    
+    private static void assertMultiTableConditionalIntoClause(final 
SQLCaseAssertContext assertContext, final InsertStatement actual, final 
InsertStatementTestCase expected) {
+        Optional<MultiTableConditionalIntoSegment> 
multiTableConditionalIntoSegment = 
InsertStatementHandler.getMultiTableConditionalIntoSegment(actual);
+        if (null == expected.getMultiTableConditionalInto()) {
+            assertFalse(multiTableConditionalIntoSegment.isPresent(), 
assertContext.getText("Actual multi table conditional into segment should not 
exist."));
+        } else {
+            assertTrue(multiTableConditionalIntoSegment.isPresent(), 
assertContext.getText("Actual multi table conditional into segment should 
exist."));
+            MultiTableConditionalIntoClauseAssert.assertIs(assertContext, 
multiTableConditionalIntoSegment.get(), 
expected.getMultiTableConditionalInto());
         }
     }
     
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoClause.java
similarity index 71%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoClause.java
index 3101d5d36f4..fead100aaaa 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoClause.java
@@ -18,19 +18,23 @@
 package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert;
 
 import lombok.Getter;
+import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dml.InsertStatementTestCase;
 
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
 
 /**
- * Expected insert multi table element.
+ * Expected multi table conditional into clause.
  */
 @Getter
-public final class ExpectedInsertMultiTableElement extends 
AbstractExpectedSQLSegment {
+@Setter
+public final class ExpectedMultiTableConditionalIntoClause extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement(name = "table-element")
-    private final List<InsertStatementTestCase> insertTestCases = new 
LinkedList<>();
+    @XmlElement(name = "conditional-into-when-then")
+    private final List<ExpectedMultiTableConditionalIntoWhenThenClause> 
conditionalIntoWhenThenClauses = new LinkedList<>();
+    
+    @XmlElement(name = "conditional-into-else")
+    private ExpectedMultiTableConditionalIntoElseClause elseClause;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoElseClause.java
similarity index 87%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoElseClause.java
index 3101d5d36f4..ce7b3f49725 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoElseClause.java
@@ -26,11 +26,11 @@ import java.util.LinkedList;
 import java.util.List;
 
 /**
- * Expected insert multi table element.
+ * Expected multi table conditional into else clause.
  */
 @Getter
-public final class ExpectedInsertMultiTableElement extends 
AbstractExpectedSQLSegment {
+public final class ExpectedMultiTableConditionalIntoElseClause extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement(name = "table-element")
+    @XmlElement(name = "insert-statement")
     private final List<InsertStatementTestCase> insertTestCases = new 
LinkedList<>();
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoThenClause.java
similarity index 87%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoThenClause.java
index 3101d5d36f4..89cabe3a454 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoThenClause.java
@@ -26,11 +26,11 @@ import java.util.LinkedList;
 import java.util.List;
 
 /**
- * Expected insert multi table element.
+ * Expected multi table conditional into then clause.
  */
 @Getter
-public final class ExpectedInsertMultiTableElement extends 
AbstractExpectedSQLSegment {
+public final class ExpectedMultiTableConditionalIntoThenClause extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement(name = "table-element")
+    @XmlElement(name = "insert-statement")
     private final List<InsertStatementTestCase> insertTestCases = new 
LinkedList<>();
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoWhenThenClause.java
similarity index 73%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoWhenThenClause.java
index 3101d5d36f4..d9566807e4a 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableConditionalIntoWhenThenClause.java
@@ -18,19 +18,22 @@
 package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert;
 
 import lombok.Getter;
+import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dml.InsertStatementTestCase;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExpression;
 
 import javax.xml.bind.annotation.XmlElement;
-import java.util.LinkedList;
-import java.util.List;
 
 /**
- * Expected insert multi table element.
+ * Expected multi table conditional into when then clause.
  */
 @Getter
-public final class ExpectedInsertMultiTableElement extends 
AbstractExpectedSQLSegment {
+@Setter
+public final class ExpectedMultiTableConditionalIntoWhenThenClause extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement(name = "table-element")
-    private final List<InsertStatementTestCase> insertTestCases = new 
LinkedList<>();
+    @XmlElement(name = "when")
+    private ExpectedExpression whenClause;
+    
+    @XmlElement(name = "then")
+    private ExpectedMultiTableConditionalIntoThenClause thenClause;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableInsertIntoClause.java
similarity index 88%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableInsertIntoClause.java
index 3101d5d36f4..9c379b793cf 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableInsertIntoClause.java
@@ -26,11 +26,11 @@ import java.util.LinkedList;
 import java.util.List;
 
 /**
- * Expected insert multi table element.
+ * Expected multi table insert into clause.
  */
 @Getter
-public final class ExpectedInsertMultiTableElement extends 
AbstractExpectedSQLSegment {
+public final class ExpectedMultiTableInsertIntoClause extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement(name = "table-element")
+    @XmlElement(name = "insert-statement")
     private final List<InsertStatementTestCase> insertTestCases = new 
LinkedList<>();
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableInsertType.java
similarity index 69%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
rename to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableInsertType.java
index 3101d5d36f4..4c7877309c9 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedInsertMultiTableElement.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/insert/ExpectedMultiTableInsertType.java
@@ -18,19 +18,18 @@
 package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert;
 
 import lombok.Getter;
+import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dml.InsertStatementTestCase;
 
-import javax.xml.bind.annotation.XmlElement;
-import java.util.LinkedList;
-import java.util.List;
+import javax.xml.bind.annotation.XmlAttribute;
 
 /**
- * Expected insert multi table element.
+ * Expected multi table insert type.
  */
 @Getter
-public final class ExpectedInsertMultiTableElement extends 
AbstractExpectedSQLSegment {
+@Setter
+public class ExpectedMultiTableInsertType extends AbstractExpectedSQLSegment {
     
-    @XmlElement(name = "table-element")
-    private final List<InsertStatementTestCase> insertTestCases = new 
LinkedList<>();
+    @XmlAttribute(name = "value")
+    private String multiTableInsertType;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/InsertStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/InsertStatementTestCase.java
index 995293a76d4..404e58ad87f 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/InsertStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/InsertStatementTestCase.java
@@ -19,9 +19,12 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
 
 import lombok.Getter;
 import lombok.Setter;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertColumnsClause;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertMultiTableElement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertValuesClause;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedMultiTableConditionalIntoClause;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedMultiTableInsertIntoClause;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedMultiTableInsertType;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedOnDuplicateKeyColumns;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedReturningClause;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.output.ExpectedOutputClause;
@@ -29,7 +32,6 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.where.ExpectedWhereClause;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.with.ExpectedWithClause;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
 import javax.xml.bind.annotation.XmlElement;
 
@@ -64,8 +66,14 @@ public final class InsertStatementTestCase extends 
SQLParserTestCase {
     @XmlElement(name = "output")
     private ExpectedOutputClause outputClause;
     
-    @XmlElement(name = "multi-table-element")
-    private ExpectedInsertMultiTableElement insertTableElement;
+    @XmlElement(name = "multi-table-insert-type")
+    private ExpectedMultiTableInsertType multiTableInsertType;
+    
+    @XmlElement(name = "multi-table-insert-into")
+    private ExpectedMultiTableInsertIntoClause multiTableInsertInto;
+    
+    @XmlElement(name = "multi-table-conditional-into")
+    private ExpectedMultiTableConditionalIntoClause multiTableConditionalInto;
     
     @XmlElement(name = "select-subquery")
     private SelectStatementTestCase selectSubquery;
diff --git a/test/it/parser/src/main/resources/case/dml/insert.xml 
b/test/it/parser/src/main/resources/case/dml/insert.xml
index c32c2ef8e66..a7b8ca3c729 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -1362,8 +1362,9 @@
     </insert>
 
     <insert sql-case-id="insert_all_with_all_placeholders" parameters="1, 1, 
'init', 2, 2, 'init', 3, 3, 'init'">
-        <multi-table-element start-index="11" stop-index="183" 
literal-start-index="11" literal-stop-index="198">
-            <table-element>
+        <multi-table-insert-type value="ALL" />
+        <multi-table-insert-into start-index="11" stop-index="183" 
literal-start-index="11" literal-stop-index="198">
+            <insert-statement>
                 <table name="t_order" start-index="16" stop-index="22" />
                 <columns start-index="24" stop-index="50">
                     <column name="order_id" start-index="25" stop-index="32" />
@@ -1386,8 +1387,8 @@
                         </assignment-value>
                     </value>
                 </values>
-            </table-element>
-            <table-element>
+            </insert-statement>
+            <insert-statement>
                 <table name="t_order" start-index="74" stop-index="80" 
literal-start-index="79" literal-stop-index="85" />
                 <columns start-index="82" stop-index="108" 
literal-start-index="87" literal-stop-index="113">
                     <column name="order_id" start-index="83" stop-index="90" 
literal-start-index="88" literal-stop-index="95" />
@@ -1410,8 +1411,8 @@
                         </assignment-value>
                     </value>
                 </values>
-            </table-element>
-            <table-element>
+            </insert-statement>
+            <insert-statement>
                 <table name="t_order" start-index="132" stop-index="138" 
literal-start-index="142" literal-stop-index="148" />
                 <columns start-index="140" stop-index="166" 
literal-start-index="150" literal-stop-index="176">
                     <column name="order_id" start-index="141" stop-index="148" 
literal-start-index="151" literal-stop-index="158" />
@@ -1434,8 +1435,8 @@
                         </assignment-value>
                     </value>
                 </values>
-            </table-element>
-        </multi-table-element>
+            </insert-statement>
+        </multi-table-insert-into>
         <select>
             <from>
                 <simple-table name="dual" start-index="199" stop-index="202" 
literal-start-index="214" literal-stop-index="217" />
@@ -2045,8 +2046,9 @@
     </insert>
 
     <insert sql-case-id="insert_with_multitable_element">
-        <multi-table-element start-index="11" stop-index="231">
-            <table-element>
+        <multi-table-insert-type value="ALL" />
+        <multi-table-insert-into start-index="11" stop-index="231">
+            <insert-statement>
                 <table name="sales" start-index="16" stop-index="20" />
                 <columns start-index="22" stop-index="56">
                     <column name="prod_id" start-index="23" stop-index="29" />
@@ -2070,8 +2072,8 @@
                         </assignment-value>
                     </value>
                 </values>
-            </table-element>
-            <table-element>
+            </insert-statement>
+            <insert-statement>
                 <table name="sales" start-index="126" stop-index="130" />
                 <columns start-index="132" stop-index="166">
                     <column name="prod_id" start-index="133" stop-index="139" 
/>
@@ -2103,8 +2105,8 @@
                         </assignment-value>
                     </value>
                 </values>
-            </table-element>
-        </multi-table-element>
+            </insert-statement>
+        </multi-table-insert-into>
         <select>
             <from>
                 <simple-table name="sales_input_table" start-index="310" 
stop-index="326" />
@@ -2119,21 +2121,83 @@
         </select>
     </insert>
 
-    <insert sql-case-id="insert_all_with_multitable_with_conditional_when">
-        <multi-table-element start-index="7" stop-index="185">
-            <table-element>
-                <table name="small_orders" start-index="48" stop-index="59" />
-                <columns start-index="60" stop-index="60" />
-            </table-element>
-            <table-element>
-                <table name="medium_orders" start-index="124" stop-index="136" 
/>
-                <columns start-index="137" stop-index="137" />
-            </table-element>
-            <table-element>
-                <table name="large_orders" start-index="174" stop-index="185" 
/>
-                <columns start-index="186" stop-index="186" />
-            </table-element>
-        </multi-table-element>
+    <insert sql-case-id="insert_all_with_multi_table_with_conditional_when">
+        <multi-table-insert-type value="ALL" />
+        <multi-table-conditional-into start-index="7" stop-index="185">
+            <conditional-into-when-then start-index="11" stop-index="59">
+                <when start-index="16" stop-index="36">
+                    <binary-operation-expression start-index="16" 
stop-index="36">
+                        <left>
+                            <column name="order_total" start-index="16" 
stop-index="26" />
+                        </left>
+                        <operator>&lt;=</operator>
+                        <right>
+                            <literal-expression value="100000" 
start-index="31" stop-index="36" />
+                        </right>
+                    </binary-operation-expression>
+                </when>
+                <then start-index="43" stop-index="59">
+                    <insert-statement>
+                        <table name="small_orders" start-index="48" 
stop-index="59" />
+                        <columns start-index="60" stop-index="60" />
+                    </insert-statement>        
+                </then>
+            </conditional-into-when-then>
+            <conditional-into-when-then start-index="61" stop-index="136">
+                <when start-index="66" stop-index="112">
+                    <binary-operation-expression start-index="66" 
stop-index="112">
+                        <left>
+                            <binary-operation-expression start-index="66" 
stop-index="86">
+                                <left>
+                                    <column name="order_total" 
start-index="66" stop-index="76" />
+                                </left>
+                                <operator>&gt;</operator>
+                                <right>
+                                    <literal-expression value="1000000" 
start-index="80" stop-index="86" />
+                                </right>
+                            </binary-operation-expression>
+                        </left>
+                        <operator>AND</operator>
+                        <right>
+                            <binary-operation-expression start-index="92" 
stop-index="112">
+                                <left>
+                                    <column name="order_total" 
start-index="92" stop-index="102" />
+                                </left>
+                                <operator>&lt;=</operator>
+                                <right>
+                                    <literal-expression value="200000" 
start-index="107" stop-index="112" />
+                                </right>
+                            </binary-operation-expression>
+                        </right>
+                    </binary-operation-expression>
+                </when>
+                <then start-index="119" stop-index="136">
+                    <insert-statement>
+                        <table name="medium_orders" start-index="124" 
stop-index="136" />
+                        <columns start-index="137" stop-index="137" />
+                    </insert-statement>
+                </then>
+            </conditional-into-when-then>
+            <conditional-into-when-then start-index="138" stop-index="185">
+                <when start-index="143" stop-index="162">
+                    <binary-operation-expression start-index="143" 
stop-index="162">
+                        <left>
+                            <column name="order_total" start-index="143" 
stop-index="153" />
+                        </left>
+                        <operator>&gt;</operator>
+                        <right>
+                            <literal-expression value="200000" 
start-index="157" stop-index="162" />
+                        </right>
+                    </binary-operation-expression>
+                </when>
+                <then start-index="169" stop-index="185">
+                    <insert-statement>
+                        <table name="large_orders" start-index="174" 
stop-index="185" />
+                        <columns start-index="186" stop-index="186" />
+                    </insert-statement>
+                </then>
+            </conditional-into-when-then>
+        </multi-table-conditional-into>
         <select>
             <from>
                 <simple-table name="orders" start-index="248" stop-index="253" 
/>
@@ -2147,21 +2211,70 @@
         </select>
     </insert>
 
-    <insert 
sql-case-id="insert_all_with_multitable_with_conditional_when_with_conditional_else">
-        <multi-table-element start-index="7" stop-index="158">
-            <table-element>
-                <table name="small_orders" start-index="48" stop-index="59" />
-                <columns start-index="60" stop-index="60" />
-            </table-element>
-            <table-element>
-                <table name="medium_orders" start-index="123" stop-index="135" 
/>
-                <columns start-index="136" stop-index="136" />
-            </table-element>
-            <table-element>
-                <table name="large_orders" start-index="147" stop-index="158" 
/>
-                <columns start-index="159" stop-index="159" />
-            </table-element>
-        </multi-table-element>
+    <insert 
sql-case-id="insert_all_with_multi_table_with_conditional_when_with_conditional_else">
+        <multi-table-insert-type value="ALL" />
+        <multi-table-conditional-into start-index="7" stop-index="158">
+            <conditional-into-when-then start-index="11" stop-index="59">
+                <when start-index="16" stop-index="36">
+                    <binary-operation-expression start-index="16" 
stop-index="36">
+                        <left>
+                            <column name="order_total" start-index="16" 
stop-index="26" />
+                        </left>
+                        <operator>&lt;=</operator>
+                        <right>
+                            <literal-expression value="100000" 
start-index="31" stop-index="36" />
+                        </right>
+                    </binary-operation-expression>
+                </when>
+                <then start-index="43" stop-index="59">
+                    <insert-statement>
+                        <table name="small_orders" start-index="48" 
stop-index="59" />
+                        <columns start-index="60" stop-index="60" />
+                    </insert-statement>
+                </then>
+            </conditional-into-when-then>
+            <conditional-into-when-then start-index="61" stop-index="135">
+                <when start-index="66" stop-index="111">
+                    <binary-operation-expression start-index="66" 
stop-index="111">
+                        <left>
+                            <binary-operation-expression start-index="66" 
stop-index="85">
+                                <left>
+                                    <column name="order_total" 
start-index="66" stop-index="76" />
+                                </left>
+                                <operator>&gt;</operator>
+                                <right>
+                                    <literal-expression value="100000" 
start-index="80" stop-index="85" />
+                                </right>
+                            </binary-operation-expression>
+                        </left>
+                        <operator>AND</operator>
+                        <right>
+                            <binary-operation-expression start-index="91" 
stop-index="111">
+                                <left>
+                                    <column name="order_total" 
start-index="91" stop-index="101" />
+                                </left>
+                                <operator>&lt;=</operator>
+                                <right>
+                                    <literal-expression value="200000" 
start-index="106" stop-index="111" />
+                                </right>
+                            </binary-operation-expression>
+                        </right>
+                    </binary-operation-expression>
+                </when>
+                <then start-index="118" stop-index="135">
+                    <insert-statement>
+                        <table name="medium_orders" start-index="123" 
stop-index="135" />
+                        <columns start-index="136" stop-index="136" />
+                    </insert-statement>
+                </then>
+            </conditional-into-when-then>
+            <conditional-into-else start-index="137" stop-index="158">
+                <insert-statement>
+                    <table name="large_orders" start-index="147" 
stop-index="158" />
+                    <columns start-index="159" stop-index="159" />
+                </insert-statement>
+            </conditional-into-else>
+        </multi-table-conditional-into>
         <select>
             <from>
                 <simple-table name="orders" start-index="221" stop-index="226" 
/>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
index 7ec25d4c3d7..d5ceb3b464c 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
@@ -84,8 +84,8 @@
     <sql-case id="insert_with_dml_table_expr_select" value="INSERT INTO 
(SELECT employee_id, last_name, email, hire_date, job_id, salary, 
commission_pct FROM employees) VALUES (207, 'Gregory', '[email protected]', 
sysdate, 'PU_CLERK', 1.2E3, NULL)" db-types="Oracle" />
     <sql-case id="insert_with_select_subquery" value="INSERT INTO bonuses 
SELECT employee_id, salary*1.1 FROM employees WHERE commission_pct > 0.25" 
db-types="Oracle" />
     <sql-case id="insert_with_multitable_element" value="INSERT ALL INTO sales 
(prod_id, cust_id, time_id, amount) VALUES (product_id, customer_id, 
weekly_start_date, sales_sun) INTO sales (prod_id, cust_id, time_id, amount) 
VALUES (product_id, customer_id, sales_mon, weekly_start_date+1) SELECT 
product_id, customer_id, weekly_start_date, sales_sun, sales_mon FROM 
sales_input_table" db-types="Oracle" />
-    <sql-case id="insert_all_with_multitable_with_conditional_when" 
value="INSERT ALL WHEN order_total &lt;= 100000 THEN INTO small_orders WHEN 
order_total > 1000000 AND order_total &lt;= 200000 THEN INTO medium_orders WHEN 
order_total > 200000 THEN INTO large_orders SELECT order_id, order_total, 
sales_rep_id, customer_id FROM orders" db-types="Oracle" />
-    <sql-case 
id="insert_all_with_multitable_with_conditional_when_with_conditional_else" 
value="INSERT ALL WHEN order_total &lt;= 100000 THEN INTO small_orders WHEN 
order_total > 100000 AND order_total &lt;= 200000 THEN INTO medium_orders ELSE 
INTO large_orders SELECT order_id, order_total, sales_rep_id, customer_id FROM 
orders" db-types="Oracle" />
+    <sql-case id="insert_all_with_multi_table_with_conditional_when" 
value="INSERT ALL WHEN order_total &lt;= 100000 THEN INTO small_orders WHEN 
order_total > 1000000 AND order_total &lt;= 200000 THEN INTO medium_orders WHEN 
order_total > 200000 THEN INTO large_orders SELECT order_id, order_total, 
sales_rep_id, customer_id FROM orders" db-types="Oracle" />
+    <sql-case 
id="insert_all_with_multi_table_with_conditional_when_with_conditional_else" 
value="INSERT ALL WHEN order_total &lt;= 100000 THEN INTO small_orders WHEN 
order_total > 100000 AND order_total &lt;= 200000 THEN INTO medium_orders ELSE 
INTO large_orders SELECT order_id, order_total, sales_rep_id, customer_id FROM 
orders" db-types="Oracle" />
     <sql-case id="insert_with_rank_column" value="INSERT INTO sales (rank) 
VALUES (1)" db-types="Oracle" />
     <sql-case id="insert_with_schema" value="INSERT INTO db1.t_order VALUES 
(1,2,3)" />
     <sql-case id="insert_on_duplicate_key_update_nothing" value="INSERT INTO 
t_order (order_id, user_id, status) VALUES (1, 1, 'insert') ON DUPLICATE KEY 
UPDATE NOTHING" db-types="openGauss" />


Reply via email to