сообщение: ORA-00060: обнаружена тупиковая ситуация при ожидании ресурса в транзакции oracle - PullRequest
0 голосов
/ 29 января 2020

У меня есть код ниже для выполнения транзакции. Я получаю сообщение об ошибке типа message:ORA-00060: deadlock detected while waiting for resource. Но если то же самое выполняется во второй раз, он работает нормально. Код кажется глючным в любом месте?

async transactionData(postData) {
        var options = {
            autoCommit: false
        };
        return new Promise(async (resolve, reject) => {
            try {
                let transactionError = false;
            let connection = await this.getConnection();
                let transactionErrorMsg = '';
                for (let i = 0; i < postData.length; i++) {
                    const sql = postData[i].query;
                    const binds = postData[i].binds;

                    try {
                        await connection.execute(sql, binds, options);
                    } catch (e) {
                        transactionErrorMsg = e.message;
                        transactionError = true;
                        console.log('Transaction error', transactionErrorMsg);
                        logger.error(transactionErrorMsg);
                        break;
                    }
                }
                if (transactionError) {
                    connection.rollback((err) => {
                        if (err) {
                            resolve({ "status": false, "message": err })
                        } else {
                            resolve({ "status": false, "message": `Transaction failed due to ${transactionErrorMsg}` })
                        }
                    });
                } else {
                    connection.commit((err) => {
                        if (err) {
                            resolve({ "status": false, "message": err })
                        } else {
                            resolve({ "status": true, "message": 'Transaction passed' })
                        }
                    });
                }
                connection.release();
            } catch (e) {
                resolve({ "status": false, "message": e.message })
            }
        })
    }
...