fix oracle insert multiple records
This commit is contained in:
parent
fc8109e109
commit
8045ca23c8
|
@ -211,17 +211,28 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
cleanupProcessorsClosures(&session.beforeClosures)
|
cleanupProcessorsClosures(&session.beforeClosures)
|
||||||
|
|
||||||
var sql = "INSERT INTO %s (%v%v%v) VALUES (%v)"
|
var sql = "INSERT INTO %s (%v%v%v) VALUES (%v)"
|
||||||
|
var statement string
|
||||||
if session.Engine.dialect.DBType() == core.ORACLE {
|
if session.Engine.dialect.DBType() == core.ORACLE {
|
||||||
sql = "INSERT ALL INTO %s (%v%v%v) VALUES (%v) SELECT 1 FROM DUAL"
|
sql = "INSERT ALL INTO %s (%v%v%v) VALUES (%v) SELECT 1 FROM DUAL"
|
||||||
}
|
temp := fmt.Sprintf(") INTO %s (%v%v%v) VALUES (",
|
||||||
|
|
||||||
statement := fmt.Sprintf(sql,
|
|
||||||
session.Engine.Quote(session.Statement.TableName()),
|
session.Engine.Quote(session.Statement.TableName()),
|
||||||
session.Engine.QuoteStr(),
|
session.Engine.QuoteStr(),
|
||||||
strings.Join(colNames, session.Engine.QuoteStr()+", "+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(),
|
session.Engine.QuoteStr(),
|
||||||
strings.Join(colMultiPlaces, "),("))
|
strings.Join(colMultiPlaces, "),("))
|
||||||
|
}
|
||||||
res, err := session.exec(statement, args...)
|
res, err := session.exec(statement, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
@ -314,8 +325,8 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
|
||||||
// remove the expr columns
|
// remove the expr columns
|
||||||
for i, colName := range colNames {
|
for i, colName := range colNames {
|
||||||
if colName == v.colName {
|
if colName == v.colName {
|
||||||
colNames = append(colNames[:i], colNames[i+1:]...)
|
colNames = append(colNames[:i], colNames[i + 1:]...)
|
||||||
args = append(args[:i], args[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)
|
exprColVals = append(exprColVals, v.expr)
|
||||||
}
|
}
|
||||||
|
|
||||||
colPlaces := strings.Repeat("?, ", len(colNames)-len(exprColumns))
|
colPlaces := strings.Repeat("?, ", len(colNames) - len(exprColumns))
|
||||||
if len(exprColVals) > 0 {
|
if len(exprColVals) > 0 {
|
||||||
colPlaces = colPlaces + strings.Join(exprColVals, ", ")
|
colPlaces = colPlaces + strings.Join(exprColVals, ", ")
|
||||||
} else {
|
} else {
|
||||||
colPlaces = colPlaces[0 : len(colPlaces)-2]
|
colPlaces = colPlaces[0 : len(colPlaces) - 2]
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlStr := fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)",
|
sqlStr := fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)",
|
||||||
|
|
Loading…
Reference in New Issue