@@ -120,6 +120,37 @@ func (ib *InsertBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{
120120 buf := newStringBuilder ()
121121 ib .injection .WriteTo (buf , insertMarkerInit )
122122
123+ if len (ib .values ) > 1 && ib .args .Flavor == Oracle {
124+ buf .WriteLeadingString (ib .verb )
125+ buf .WriteString (" ALL" )
126+
127+ for _ , v := range ib .values {
128+ if len (ib .table ) > 0 {
129+ buf .WriteString (" INTO " )
130+ buf .WriteString (ib .table )
131+ }
132+ ib .injection .WriteTo (buf , insertMarkerAfterInsertInto )
133+ if len (ib .cols ) > 0 {
134+ buf .WriteLeadingString ("(" )
135+ buf .WriteString (strings .Join (ib .cols , ", " ))
136+ buf .WriteString (")" )
137+
138+ ib .injection .WriteTo (buf , insertMarkerAfterCols )
139+ }
140+
141+ buf .WriteLeadingString ("VALUES " )
142+ values := make ([]string , 0 , len (ib .values ))
143+ values = append (values , fmt .Sprintf ("(%v)" , strings .Join (v , ", " )))
144+ buf .WriteString (strings .Join (values , ", " ))
145+ }
146+
147+ buf .WriteString (" SELECT 1 from DUAL" )
148+
149+ ib .injection .WriteTo (buf , insertMarkerAfterValues )
150+
151+ return ib .args .CompileWithFlavor (buf .String (), flavor , initialArg ... )
152+ }
153+
123154 if len (ib .table ) > 0 {
124155 buf .WriteLeadingString (ib .verb )
125156 buf .WriteString (" INTO " )
0 commit comments