2011-12-27 10 views
0

私はDB2を初めて使用しており、DB2データベースに単純なテーブルキューを実装しようとしています。私は が必要なのは、複数のクライアントがキューから同じ行を2回取得しないように、テーブルの行を一度に選択して削除することです。私は同様の質問を探していましたが、別のデータベースの解決策を説明したり、かなり複雑な解決策を記述したりしていました。一度に行を選択して削除するだけで済みます。キューファンクションのDB2で一度に選択して削除する方法

UPDATE:私はまさに私が必要なもののように見えた、このようなWeb DB2句で発見 - 削除から選択します。例: SELECT * OLDテーブルから

(example_id = 1の例からDELETE) 2つの一致要求が同じ結果を得ないか、同じ行を削除しても、この文がアトミックであるかどうかは疑問です。

答えて

0

あなたは(少なくとも9.5以降、data-change-table-referenceを検索)バージョン9.1以降のDB2 for z/OS(メインフレームのDB2)、またはLinux/Unix/Windowsにしている場合は、あなたがSELECT FROM DELETEステートメントを使用することができます。

SELECT * 
FROM OLD TABLE 
    (DELETE FROM TAB1 
    WHERE COL1 = 'asdf'); 

これは、削除されたすべての行を表示します。

編集: Ooopsは、このタイプのステートメントの使用についてあなたの編集を見ました。そして、彼がコメントで言ったように、同じ行を得る2つの別々のアプリケーションはあなたのIsolation Levelに依存します。

1

このような何か:

SELECT COL1, COL2, ... FROM TABLE WHERE TABLE_ID = value 
    WITH RR USE AND KEEP EXCLUSIVE LOCKS; 
DELETE FROM TABLE WHERE TABLE_ID = value; 
COMMIT; 
+0

私はこれについて考えていましたが、選択と削除の間でアプリケーションがクラッシュするとどうなるのだろうと思います。テーブルは永遠にロックされますか?または接続が失われたときにテーブルがすぐにロック解除されますか? – HPCS

+0

@HPCS:テーブルの作成時に定義されたテーブルロックレベルによって異なります。たぶん行やページだけがロックされているでしょう。使用している言語に応じて、異常終了はデータベースロックの自動ROLLBACKをトリガーする必要があります。 –

関連する問題