【发布时间】:2020-03-13 20:21:49
【问题描述】:
我有一个在我的数据库中执行插入的事务,但我需要执行另一个更简单的插入,如果第二次插入出现错误,我想调用事务回滚。
await knex.transaction(async trx => {
const queries = []
for(const dadoResultado of dadoResultados.dados){
const query = app.db.raw(`
insert into dadoResultados
...
`)
.transacting(trx)
.catch(err => res.status(500).send(err.message))
queries.push(query)
}
await Promise.all(queries)
.then(trx.commit)
.catch(trx.rollback)
})
await app.db.raw(`
INSERT INTO resumoacompanhamentos (num, value)
values (13, 50)
`)
代码修改:
try{
await app.db(async trx => {
for(const data of values.dados){
await trx.raw(`
insert into values(code_inst, money, subscription, version, first_name)
select
b.code_inst,
b.money
p.subscription,
a.version,
b.first_name
from (VALUES (${data.code_inst}, ${data.money}, ${data.first_name}) b(code_inst, money, first_name)
inner join table_P as p
on p.code_inst = b.code_inst
AND p.version = b.version
AND p.code_inst = b.code_inst
left join table_A AS a
on a.subscription = p.subscription
`)
}
const sum_value_final = await app.db.raw(`
SELECT
SUM(money) AS money
FROM values
WHERE first_name = ${first_nameFile}
AND subscription = ${values.dados[0].subscription}
`)
const sumValues = await sum_value_final.rows[0]
await app.db.raw(`
INSERT INTO resume_table (code_inst, subscription)
values (${sumValues.dados[0].code_inst}, ${sumValues.dados[0].subscription)
`)
})
} catch(err){
res.status(500).send(err.message);
}
错误二:
select * from (select *) - FROM 中的子查询必须有别名
【问题讨论】:
-
起来,能帮帮我吗?
标签: node.js postgresql knex.js