2016-05-15 5 views
0

Ich habe ein Problem nach SQL-Abfrage. Meine Einfügeabfrage gibt die Antwort zurück, dass das Tupel erfolgreich eingefügt wurde, aber tatsächlich gibt es kein Tupel in der Tabelle. Aus bestimmten Gründen funktioniert das nicht. Abfrage:Node.js und Oracle DB: Einfügen von Abfrageanweisung funktioniert nicht

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); 
        } 
       }); 

Vielen Dank.

** UPDATE_SOLUTION1: Fügen Sie Ihrem Server-Skript hinzu: oracledb.autoCommit = true; **

** UPDATE_SOLUTION2: add {autoCommit: true} auszuführen() **

+0

allgemeine Praxis ist eine schlechte autocommit Einstellung. Ich würde ein Commit hinzufügen; zu deiner Aussage. –

Antwort

2

Die globale oracledb.autoCommit = true kann zu einer Überbindung führen, was Ressourcenverschwendung bedeutet und dazu führen kann, dass Sie nicht zum gewünschten Datenzustand zurückkehren können, wenn ein Teil Ihrer Anwendung fehlschlägt.

Wenn Sie eine bestimmte Insert-Anweisung wissen sollten sofort verpflichtet werden, der effizienteste Weg ist das execute() option Äquivalent autoCommit wie hinzuzufügen:

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){ 
       ... 

Wenn Sie nicht wollen, unmittelbar nach einem execute() begehen Sie können Verwenden Sie eine explizite commit() zu jeder gewünschten Zeit später. Beachten Sie, dass dies einen 'Roundtrip' zum Datenbankserver erfordert, im Gegensatz zu den autoCommit Optionen, die auf den execute() Aufruf 'piggybacked' sind. Unnötige Roundtrips reduzieren die ultimative Skalierbarkeit.

Lesen Sie die Dokumentation: https://github.com/oracle/node-oracledb/blob/master/doc/api.md#transactionmgt

+0

Christopher Danke –

2

Ich weiß nicht, wie node.js funktioniert, aber Oracle ein nach einem Einsatz verpflichten müssen, in der Regel.

+0

Gott segne dich) es funktioniert) –