Как выбрать и удалить сразу в DB2 для функциональности очереди - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь реализовать простую очередь таблиц в базе данных DB2. Что мне нужно состоит в том, чтобы выбрать и удалить строку в таблице сразу, чтобы несколько клиентов не получили одну и ту же строку из очереди дважды. Я искал похожие вопросы, но они описывают решение для другой базы данных или описывают довольно сложные решения. Мне нужно только выбрать и удалить строку сразу.

ОБНОВЛЕНИЕ: я нашел в сети предложение db2, которое выглядит именно так, как мне нужно - выбор из удаления: пример: SELECT * FROM OLD TABLE (УДАЛИТЬ ИЗ примера, ГДЕ example_id = 1)

но мне интересно, является ли этот оператор атомарным, если два параллельных запроса не получают одинаковый результат или удаляют одну и ту же строку.

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Примерно так:

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 голосов
/ 29 декабря 2011

Если вы используете DB2 для z / OS (мэйнфрейм DB2) начиная с версии 9.1 или Linux / Unix / Windows (начиная с версии 9.5, найдите data-change-table-reference), вы можете использовать оператор SELECT FROM DELETE:

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

Это даст вам все строки, которые были удалены.

Редактировать: Упс, только что виделредактировать об использовании этого типа заявления.И как он сказал в комментарии, два отдельных приложения, получающие одну и ту же строку, зависят от вашего уровня изоляции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...