как выбрать и обновить одновременно в оракуле - PullRequest
2 голосов
/ 20 июля 2011

Я хочу выбрать несколько строк и немедленно обновить столбец процесса в этой строке как «Y», прежде чем другой поток придет и заберет его.

Как это сделать в Oracle

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

Я использую Oracle и не могу найти ответы, связанные с oracle на этом форуме?

Пожалуйста, помогите

Ответы [ 2 ]

6 голосов
/ 20 июля 2011

Предложение "RETURNING" в oracle делает это.

INSERT INTO <table> (c1, c2, .., cn) VALUES (v1, v2, .., vn) RETURNING <expression> INTO <variables>

UPDATE <table> SET (c1) = (v1), (c2) = (v2), (cn) = (vn) WHERE <condition> RETURNING <expression> INTO <variables>

DELETE FROM <table> WHERE <condition> RETURNING <expression> INTO <variables>
3 голосов
/ 20 июля 2011

Вот простой способ сделать это:

Создать таблицу с именем test :

create table test (id number, col_to_update varchar2(20));

Вставить данные в таблицу test :

insert into test values (1, 'BOB');
insert into test values (2, 'PETER');
insert into test values (3, 'BOB');
insert into test values (4, 'PETER');
insert into test values (5, 'BOB');

Запуск блока PL / SQL:

declare
  cursor c1 is
   select id
        , col_to_update
          from test
         where col_to_update = 'BOB'
    for update of col_to_update;
begin
   for c1_rec in c1 loop
       update test
              set col_to_update = 'UPDATED'
            where current of c1;
       commit;
   end loop;
end;
/

Результат:

Вы должны увидеть все строки с col_to_update «BOB» обновляется до «UPDATE»;

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