如何在oracle中同时选择和更新

时间:2011-07-19 21:12:25

标签: oracle11g

我想选择一些行,并在另一个线程到来之前立即将该行中的进程列更新为“Y”。

如何在Oracle中执行此操作

最初我有一个select for update查询,它不起作用。在多线程模式下实现此目的的方法是什么。

我正在使用Oracle而无法在此论坛中找到与oracle相关的答案?

请帮忙

2 个答案:

答案 0 :(得分:6)

"返回" 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>

答案 1 :(得分:3)

这是一种简单的方法:

创建一个名为 test 的表格:

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

将数据插入表测试

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';