diff --git a/session_insert.go b/session_insert.go index 2d076fae..5b607b1f 100644 --- a/session_insert.go +++ b/session_insert.go @@ -211,17 +211,28 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error cleanupProcessorsClosures(&session.beforeClosures) var sql = "INSERT INTO %s (%v%v%v) VALUES (%v)" + var statement string if session.Engine.dialect.DBType() == core.ORACLE { sql = "INSERT ALL INTO %s (%v%v%v) VALUES (%v) SELECT 1 FROM DUAL" + temp := fmt.Sprintf(") INTO %s (%v%v%v) VALUES (", + session.Engine.Quote(session.Statement.TableName()), + session.Engine.QuoteStr(), + strings.Join(colNames, session.Engine.QuoteStr() + ", " + session.Engine.QuoteStr()), + session.Engine.QuoteStr()) + statement = fmt.Sprintf(sql, + session.Engine.Quote(session.Statement.TableName()), + session.Engine.QuoteStr(), + strings.Join(colNames, session.Engine.QuoteStr() + ", " + session.Engine.QuoteStr()), + session.Engine.QuoteStr(), + strings.Join(colMultiPlaces, temp)) + } else { + statement = fmt.Sprintf(sql, + session.Engine.Quote(session.Statement.TableName()), + session.Engine.QuoteStr(), + strings.Join(colNames, session.Engine.QuoteStr() + ", " + session.Engine.QuoteStr()), + session.Engine.QuoteStr(), + strings.Join(colMultiPlaces, "),(")) } - - statement := fmt.Sprintf(sql, - session.Engine.Quote(session.Statement.TableName()), - session.Engine.QuoteStr(), - strings.Join(colNames, session.Engine.QuoteStr()+", "+session.Engine.QuoteStr()), - session.Engine.QuoteStr(), - strings.Join(colMultiPlaces, "),(")) - res, err := session.exec(statement, args...) if err != nil { return 0, err @@ -314,8 +325,8 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { // remove the expr columns for i, colName := range colNames { if colName == v.colName { - colNames = append(colNames[:i], colNames[i+1:]...) - args = append(args[:i], args[i+1:]...) + colNames = append(colNames[:i], colNames[i + 1:]...) + args = append(args[:i], args[i + 1:]...) } } @@ -324,11 +335,11 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { exprColVals = append(exprColVals, v.expr) } - colPlaces := strings.Repeat("?, ", len(colNames)-len(exprColumns)) + colPlaces := strings.Repeat("?, ", len(colNames) - len(exprColumns)) if len(exprColVals) > 0 { colPlaces = colPlaces + strings.Join(exprColVals, ", ") } else { - colPlaces = colPlaces[0 : len(colPlaces)-2] + colPlaces = colPlaces[0 : len(colPlaces) - 2] } sqlStr := fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)",