問題タブ [database-cursor]

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 投票する
4 に答える
35205 参照

tsql - T-SQL: 更新トリガーでカーソルを CLOSE/DEALLOCATE する適切な方法

次のようなトリガーがあるとします。

Cursor1 が常に閉じられ、割り当てが解除されていることを確認したいと思います。myProc1 または myProc2 でさえ失敗します。

try/catch ブロックを使用しますか?

0 投票する
3 に答える
8288 参照

python - レコードセットをループして同時に更新するには、複数のカーソルオブジェクトが必要ですか?

そのため、一度にメモリに保持できない大規模なデータベースがあります。テーブル内のすべてのアイテムをループして処理し、処理されたデータをテーブル内の別の列に配置する必要があります。

カーソルをループしているときに、updateステートメントを実行しようとすると、レコードセットが切り捨てられます(カーソルオブジェクトを再利用しているためだと思います)。

質問:

updateステートメントを実行するための2番目のカーソルオブジェクトを作成すると、元のselectステートメントをループし続けることができますか?

2番目のカーソルオブジェクトを作成するには、データベースへの2番目の接続が必要ですか?これにより、これを実行できますか?

sqliteは、データベースへの2つの接続(1つはテーブルからの読み取り、もう1つはデータベースへの書き込み)にどのように応答しますか?

私のコード(簡略化):

私が試したもう1つの方法は、selectステートメントを次のように変更することでした。

それから私はします:

これに関して私が抱えていた問題は、実際のselectステートメントにJOINが含まれていて時間がかかるため、JOINを何度も実行すると非常に時間がかかることでした。選択を1回だけ実行し、次にジェネレーターを使用してプロセスを高速化しようとしているので、すべてをメモリに保持する必要はありません。

解決:

さて、私の最初の2つの質問に対する答えは「いいえ」です。3番目の質問ですが、データベースへの接続が確立されると、データベース全体がロックされるため、最初の接続が閉じられるまで、別の接続は何もできなくなります。

ソースコードは見つかりませんでしたが、経験的な証拠から、接続では一度に1つのカーソルオブジェクトしか使用できず、最後に実行されたクエリが優先されると思います。これは、選択したレコードセットをループして一度に1行ずつ生成しているときに、最初の更新ステートメントを実行するとすぐに、ジェネレーターが行の生成を停止することを意味します。

私の解決策は、processed_contentをidで固定する一時データベースを作成することです。これにより、データベースごとに1つの接続/カーソルオブジェクトがあり、一時データベースに定期的に挿入しながら、選択したレコードセットをループし続けることができます。選択したレコードセットの最後に到達したら、一時データベースのデータを元のデータベースに戻します。

誰かが接続/カーソルオブジェクトについて確かに知っているなら、コメントで知らせてください。

0 投票する
9 に答える
28251 参照

sql - MS SQL Server - CURSOR が良いのはいつですか?

ストアド プロシージャなどを作成したときに、最初は CURSOR を使用していたことが何度もありましたが、後でプロシージャのパフォーマンスの問題を発見しました。

私が読んだすべてのことは、CURSORSがひどい、不必要なロックを引き起こすなどと言っており、パフォーマンステストでも同じことが証明されています。

私の質問は、いつ CURSOR を使用し、どのような状況でそれらが有用または優れているかということです。

役に立たないのなら、なぜ彼らは SQL のためにそのような悪い制御構造/型を作るのでしょうか?

0 投票する
11 に答える
156763 参照

sql - T-SQL でテーブル変数をループできますか?

T-SQLでテーブル変数をループする方法はありますか?

私もカーソルを使用していますが、カーソルはテーブル変数よりも柔軟性が低いようです。

カーソルと同じ方法でテーブル変数を使用できるようにしたいと考えています。そうすれば、プロシージャの一部でテーブル変数に対していくつかのクエリを実行し、後でテーブル変数の各行に対していくつかのコードを実行できます。

どんな助けでも大歓迎です。

0 投票する
17 に答える
246171 参照

sql - カーソルを使用せずに各行のSQL呼び出しストアドプロシージャ

カーソルを使用せずに、行の列がspへの入力パラメーターであるテーブルの各行のストアドプロシージャを呼び出すにはどうすればよいですか?

0 投票する
2 に答える
171775 参照

mysql - MySQL での結果セットのループ

やや単純な選択クエリを実行し、追加のクエリ、データ変換、またはデータを完全に破棄するかどうかを決定するために結果をループするストアド プロシージャを MySQL で作成しようとしています。効果的に、私はこれを実装したいと思います:

ただ、MySQLだけにしたいので、プロシージャとして呼び出すことができます。トリガーにはFOR EACH ROW ...構文があることは知っていますが、構文以外で使用するためのこのようなものについての言及は見つかりませんCREATE TRIGGER ...。MySQL のループ メカニズムのいくつかを読みましたが、今のところ想像できるのは、次のようなものを実装することだけです。

これでも頭がぼやけていますが。

参考までに、必ずしも関係があるとは思いませんが、最初のクエリは 4 つのテーブルを結合して階層的なアクセス許可のモデルを形成し、特定のアクセス許可がチェーンのどの程度上にあるかに基づいて、次の追加情報を取得します。その権限を継承する子。

0 投票する
7 に答える
37944 参照

php - 無効なカーソル状態、SQLExecDirect の SQL 状態 24000

PHP で ODBC 経由で 2 つのストアド プロシージャを順番に呼び出す必要があります。

2 番目のストアド プロシージャ呼び出しの後、PHP で次のエラーが発生します。

警告: odbc_exec() [function.odbc-exec]: SQL エラー: [unixODBC][FreeTDS][SQL Server]無効なカーソル状態、SQLExecDirect の SQL 状態 24000

ストアド プロシージャを呼び出す順序を並べ替えると、常に 2 番目にエラーが発生します。呼び出しの間にカーソル位置をリセットする方法はありますか? ここで私の要素から少し外れています。

0 投票する
3 に答える
18845 参照

python - MySQLDB SScursor を効率的に使用するには?

大規模な結果セット (数十万行、場合によってはそれ以上) を処理する必要があります。
残念ながら、これらは (起動時に) 一度に取得する必要があります。

私はできるだけ少ないメモリを使用してそれをやろうとしています。
SO をSSCursor見ると、私が探しているのは using かもしれないことがわかりましたが、それらを正確に使用する方法はまだよくわかりません。

fetchall()ベースカーソルまたはSScursorからの実行は同じですか(メモリ使用量に関して) ?

sscursor から行を 1 つずつ (または数つずつ) 'ストリーミング' できますか? できる場合、最も効率的な方法は何ですか?

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

java - jdbc を使用した Oracle のカーソルの明確化

私が使用しているサード パーティのオープン ソース製品が Oracle でカーソルを使い果たし、次のエラーを受け取る状況があります: java.sql.SQLException: ORA-01000: 最大オープン カーソルを超えました

最大カーソル数が 1000 に設定されており、この制限に達しているコードが何か間違ったことを行っているのか、単に制限を増やす必要があるのか​​を調べようとしています。

調査の結果、ResultSet が作成されるコード内のポイントを見つけたため、開いているカーソルの数が 1 増えました。ただし、その ResultSet は使用後すぐに閉じられます....しかし、カーソルの数はそのままです。サードパーティのオープン ソース プロジェクト以外の単純な JDBC アプリケーションでロジックを再現することができました。

ResultSet と PreparedStatements を閉じると開いているカーソルがすべて閉じられると思わせる Oracle のドキュメントをいくつか見つけましたが、開いているカーソルがぶら下がっているようです。この FAQ ( http://download.oracle.com/docs/cd/B10501_01/java.920/a96654/basic.htm#1006509 ) を参照してください。「結果セットまたはステートメントを閉じると、データベース内の対応するカーソルが解放されます。」起こらないと思われる私のテストに基づいているだけなので、基本的な理解が欠けているに違いありません。

Oracleがカーソルを処理する方法を説明したり、私を啓発するドキュメントを教えてもらえますか?

ありがとう!

0 投票する
3 に答える
7308 参照

oracle - OraclePLSQL-存在しない表にカーソルを宣言します

存在しないテーブルにカーソルを宣言したい。もちろん、私のプロシージャはコンパイルされません。

このテーブルは一時的なテーブルであり、前処理によって作成されます。実行時に存在しますが、コンパイル時に別の話になります。

他のDML操作の選択/更新には、

EXECUTE IMMEDIATE 'operation from tmp_table'

しかし、カーソルの回避策が見つかりません。

方法はありますか?

基本的に、これをコンパイルしたい

アップデート

これまでのところコンパイルしていません:

おかげで、CREATEPROCEDUREを使用する必要があります。

前もって感謝します。