2016-05-15 114 views
0

根據SQL查詢,我遇到了問題。我的插入查詢返回答案,該元組插入成功,但實際上在表中沒有元組。所以由於某些原因,它不起作用。 查詢:Node.js和Oracle DB:插入查詢語句不起作用

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:加自動提交:真正}執行()**

+0

一般來說,設置自動提交是一種不好的做法。我會添加一個提交;發言。 –

回答

2

全局oracledb.autoCommit = true可能導致過度提交,這會浪費資源並且可能意味着如果應用程序的某些部分失敗,則無法回滾到期望的數據狀態。

如果你知道一個特定的INSERT語句應立即提交,最有效的方法是添加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){ 
       ... 

如果你不想要一個​​後就可以立即提交稍後在任何需要的時間使用明確的commit()。請注意,這需要數據庫服務器的「往返」,而不像autoCommit選項「搭載」到​​呼叫上。不必要的往返會降低終極可擴展性。

請參閱文檔:https://github.com/oracle/node-oracledb/blob/master/doc/api.md#transactionmgt

+0

克里斯托弗謝謝你 –

2

我不知道該怎麼Node.js的作品,但甲骨文需要插入後提交,通常。

+0

祝福你的上帝)它的工作原理) –