3

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: execute() に { autoCommit: true } を追加 **

4

2 に答える 2

9

データが表示されない場合は、コミットされていないことが原因です。これを行うにはいくつかの方法があります。

INSERT ステートメントをすぐにコミットする必要があることがわかっている場合、最も効率的な方法は、次のようなexecute()オプションを追加することです。 autoCommit

const r = await 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 });

INSERTS のシーケンスの一般的な推奨事項はautoCommit、最後のステートメントでのみ使用することです。

同等のグローバルoracledb.autoCommit = trueではオーバーコミットが発生する可能性があります。これはリソースの浪費であり、アプリケーションの一部に障害が発生した場合に目的のデータ状態にロールバックできない可能性があります。

execute()またはの直後にコミットしたくない場合は、後でいつでもexecuteMany()明示的に使用できます。または呼び出しに「ピギーバック」されるオプションとはcommit()異なり、これにはデータベース サーバーへの「ラウンドトリップ」が必要であることに注意してください。不要なラウンドトリップは、最終的なスケーラビリティを低下させます。autoCommitexecute()executeMany()

ドキュメントトランザクション管理を参照してください。

executeMany()多数のレコードを挿入または更新する場合は、一連の INSERT または UPDATE のパフォーマンスを大幅に改善できるを使用する方が効率的です。

于 2016-05-16T01:23:40.753 に答える
4

node.js がどのように機能するかはわかりませんが、通常、Oracle は挿入後にコミットが必要です。

于 2016-05-15T14:25:17.943 に答える