Node.js和Oracle DB:插入查询语句不起作用

时间:2016-05-15 13:26:38

标签: node.js oracle sql-insert

我根据SQL查询有问题。我的插入查询返回成功插入元组但实际上表中没有元组的答案。因此,由于某些原因,它不起作用。 查询:

connection.execute(
                "INSERT INTO "+table+
                " VALUES "+
                "(:0, :1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11)",
                [objIns.attr1, objIns.attr2, objIns.attr3, objIns.attr4, objIns.attr5, objIns.attr6, objIns.attr7, objIns.attr8, objIns.attr9, objIns.attr10, objIns.attr11, objIns.attr12],
                function(err, result){
                    if (err) {
                        console.error("insert2",err.message); 
                        callback(err.message)
                    } else{
                    console.log("Rows inserted " + result.rowsAffected);
                    }
                });

谢谢。

** UPDATE_SOLUTION1:添加到您的服务器脚本:oracledb.autoCommit = true; **

** UPDATE_SOLUTION2:将{autoCommit:true}添加到execute()**

2 个答案:

答案 0 :(得分:4)

全局oracledb.autoCommit = true可能导致过度提交,这会浪费资源,并且可能意味着如果应用程序的某些部分失败,您将无法回滚到所需的数据状态。

如果您知道应立即提交特定的插入语句,最有效的方法是添加execute() option等效autoCommit,如:

connection.execute(
                "INSERT INTO "+table+
                " VALUES "+
                "(:0, :1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11)",
                [objIns.attr1, objIns.attr2, objIns.attr3, objIns.attr4, objIns.attr5, objIns.attr6, objIns.attr7, objIns.attr8, objIns.attr9, objIns.attr10, objIns.attr11, objIns.attr12],
                { autoCommit: true },
                function(err, result){
                ...

如果您不希望在execute()之后立即提交,则可以在以后的任何时间使用明确的commit()。请注意,这需要往返'数据库服务器不同于autoCommit选项,这些选项是背驮式的'到execute()电话。不必要的往返减少了最终的可扩展性。

请参阅文档:https://github.com/oracle/node-oracledb/blob/master/doc/api.md#transactionmgt

答案 1 :(得分:2)

我不知道node.js是如何工作的,但是通常在插入后Oracle需要提交。