問題タブ [node-odbc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
287 参照

node.js - node-odbc/sybase でストアド プロシージャをクエリするにはどうすればよいですか?

たくさんの google-fu を試した後、古い sybase データベースにクエリを実行して、node-odbc ( https://github.com/markdirish/node- odbc/blob/master/README.md#callprocedurecatalog-schema-name-parameters-callback )。

selectステートメントを使用して正常にクエリを実行できましたが、セキュリティ上の理由からそれを行いたくありません。ストアド プロシージャを使用しようとすると、奇妙な応答が返されます。ここで健全性チェックが必要で、何が欠けているかを把握します。

私が試したストアド プロシージャの例は、アカウント番号を使用して電子メール アドレスをチェックする 1 つのパラメーターを持つ単純な sp です (これはもちろん偽の sp ですが、同じ方法でフォーマットされています)。

"DB"."spGetEmail"(@acctnum varchar(50) )

ドキュメントはこれを示しています:

const odbc = require('odbc');

odbc.connect( ${process.env.CONNECTION_STRING}, (エラー, 接続) => { connection.callProcedure(null, null, 'MY_PROC', [未定義], (エラー, 結果) => { if (エラー) { console.error(エラー) } / / handle // 結果には結果の配列が含まparametersれ、プロシージャによって返されるパラメータにアクセスするためのプロパティがあります console.log(result); }); });

私はそれを次のように解釈しました:

odbc.connect(${process.env.CONNECTION_STRING}, (エラー, 接続) => { connection.callProcedure(null, "DB", "spGetEmail", [123456], (エラー, 結果) => { if (エラー) { console.error(error) } // ハンドル // 結果には結果の配列が含まparametersれ、プロシージャによって返されるパラメータにアクセスするためのプロパティがあります console.log(result); }); });

それから私はこれを得る:

[エラー: [odbc] プロシージャが予期するパラメーターの数と、渡されたパラメーターの数が等しくありません] { odbcErrors: [] } 未定義のセグメンテーション違反

いくつかのパラメーターが不足していることは簡単に思えますが、そうではないことはわかっています。dang sp は 1 つのパラメータを取ります!

ここで何が欠けていますか??

0 投票する
0 に答える
30 参照

node.js - [node-odbc]データのフェッチ時にメモリの割り当てまたは再割り当て中にエラーが発生しました。ODBC エラー情報がありません

私のシステム

  • データベースのバージョン: 6.1.0
  • データベース名: サイベース
  • Node.js バージョン:12.18.3
  • node-odbc パッケージ バージョン: 2.4.1
  • Node.js OS: Windows 10 プロ

不具合

odbc パケットに対して大量のデータを含む同じクエリを何度も起動すると、次のエラーが返されます。「[odbc]データのフェッチ時にメモリの割り当てまたは再割り当てでエラーが発生しました。利用可能な ODBC エラー情報はありません」。結果がサービス応答に返され、変数が消去されているにもかかわらず、各クエリでヒープがいっぱいになります。パラメーター (cursor=true) を使用してクエリを実行し、データを取得せずにカーソルを閉じても問題はありません。テーブルに longvarchar フィールドがある場合、同じ問題が発生します。接続を閉じても、データベースはまだ開いていると表示します。

接続odbc

予想される行動

クエリが次々に実行されるにもかかわらず、システムがメモリ不足になる理由がわかりません。クエリを 1 回実行しても問題は発生しません。

再現する

22 フィールド (2 varchar(32767)) と 5633 レコードを含むテーブルを準備します。接続を開くキーを押してサービスを 15 回呼び出し、テーブルで SELECT クエリを実行し、接続を閉じて結果を返します。