我正在研究一个groovy脚本,该脚本在下一个执行的insert语句中使用sql exceuteInsert的结果。
从executeInsert返回的列表周围有两组squarebrackets,这会导致sql语法错误。我不确定为什么它返回两组括号,如果有一种方法可以删除两者。
我已设法使用联接删除一组括号。我的代码如下:
db.withTransaction {
def ticketResultList
parsedTicketData.each { ticket ->
String ticketQuery = "INSERT INTO ticket" + "(name, summary) VALUES" + "('${ticket.name}','${ticket.summary}')"
def ticketResult = db.executeInsert(ticketQuery)
ticketResultList = ticketResult.join(",")
}
parsedStatusData.each { status ->
String ticketStatusQuery = "INSERT INTO ticket_status" + "(status, status_date, ticket_id, version) VALUES" + "('${status.status}','${status.statusDate}', ${ticketResultList}, 1)"
db.executeInsert(ticketStatusQuery)
}
以下是正在接收的sql错误:由于以下原因导致回退:整数值不正确:[31041]第1行的“ticket_id”列
答案 0 :(得分:0)
在不知道代码背后的代码或动机的情况下,也没有阅读评论!)我会写这样的东西:
db.withTransaction {
def ticketResultList = []
parsedTicketData.each { ticket ->
def ticketQuery = "INSERT INTO ticket" + "(name, summary) VALUES" + "('${ticket.name}','${ticket.summary}')"
def ticketResult = db.executeInsert(ticketQuery)
ticketResultList << ticketResult
}
parsedStatusData.each { status ->
def ticketStatusQuery = "INSERT INTO ticket_status" + "(status, status_date, ticket_id, version) VALUES" + "('${status.status}','${status.statusDate}', ${ticketResultList.flatten().join(',')}, 1)"
db.executeInsert(ticketStatusQuery)
}
答案 1 :(得分:0)
基于Groovy executeInsert的信息。
我假设:
您的表格票证返回一个自动更新的密钥
列表parsedStatusData和parsedTicketData在相同的位置上具有相同的长度和相应的条目。
db.withTransaction {
parsedTicketData.each { ticket ->
def INS1 = "INSERT INTO ticket (name, summary) VALUES (${ticket.name},${ticket.summary})"
def ticketResult = db.executeInsert(INS1)
ticketResultList << ticketResult[0][0] /* get the 1st returned value */
}
parsedStatusData.eachWithIndex { status, i ->
def INS2 = """INSERT INTO ticket_status (status, status_date, ticket_id, version)
VALUES (${status.status},${status.statusDate}, ${ticketResultList[i]}, 1)"""
db.executeInsert(INS2)
}
}
另请注意,我重新构造了您的SQL字符串,这不仅更紧凑,而且还导致使用bind varibles。生成的SQL类似于
INSERT INTO ticket (name, summary) VALUES (:1,:2) RETURNING ID INTO :3