MergeIntoStatement <- WithClause? 'MERGE' 'INTO' TargetOptAlias MergeIntoUsingClause MergeMatch* ReturningClause? MergeIntoUsingClause <- 'USING' TableRef JoinQualifier MergeMatch <- MatchedClause / NotMatchedClause MatchedClause <- 'WHEN' 'MATCHED' AndExpression? 'THEN' MatchedClauseAction MatchedClauseAction <- UpdateMatchClause / DeleteMatchClause / InsertMatchClause / DoNothingMatchClause / ErrorMatchClause UpdateMatchClause <- 'UPDATE' (UpdateMatchSetClause / ByNameOrPosition?) DeleteMatchClause <- 'DELETE' InsertMatchClause <- 'INSERT' (InsertValuesList / DefaultValues / InsertByNameOrPosition)? InsertByNameOrPosition <- ByNameOrPosition? '*'? InsertValuesList <- InsertColumnList? 'VALUES' Parens(List(Expression)) DoNothingMatchClause <- 'DO' 'NOTHING' ErrorMatchClause <- 'ERROR' Expression? UpdateMatchSetClause <- 'SET' (UpdateSetClause / '*') AndExpression <- 'AND' Expression NotMatchedClause <- 'WHEN' 'NOT' 'MATCHED' BySourceOrTarget? AndExpression? 'THEN' MatchedClauseAction BySourceOrTarget <- 'BY' ('SOURCE' / 'TARGET')