我想选择一些行,并在另一个线程到来之前立即将该行中的进程列更新为“Y”。
如何在Oracle中执行此操作
最初我有一个select for update查询,它不起作用。在多线程模式下实现此目的的方法是什么。
我正在使用Oracle而无法在此论坛中找到与oracle相关的答案?
请帮忙
答案 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';