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

Oracle11g 如何在oracle中同时选择和更新,oracle11g,Oracle11g,我想选择一些行,并在另一个线程来取它之前,立即将该行中的进程列更新为“Y” 如何在Oracle中执行此操作 最初,我有一个select for update查询,但它不起作用。在多线程模式下实现这一点的方法有哪些 我正在使用Oracle,在此论坛中找不到与Oracle相关的答案 请帮助oracle中的“RETURNING”子句可以做到这一点 INSERT INTO <table> (c1, c2, .., cn) VALUES (v1, v2, .., vn) RETURNING &

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

如何在Oracle中执行此操作

最初,我有一个select for update查询,但它不起作用。在多线程模式下实现这一点的方法有哪些

我正在使用Oracle,在此论坛中找不到与Oracle相关的答案

请帮助

oracle中的“RETURNING”子句可以做到这一点

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>
插入(c1,c2,…,cn)值(v1,v2,…,vn)返回到
更新集(c1)=(v1),(c2)=(v2),(cn)=(vn),其中返回到
从返回到的位置删除

这里有一个简单的方法:

创建一个名为“测试”的表:

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');
将数据插入表测试

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;
/
结果:


您应该看到所有列为“更新”的行被更新为“更新”

我想先选择,然后更新。在我选择之前,我不知道更新哪一个。在上面的查询中添加where子句不会解决这个问题吗?我的建议解决了你的问题吗?还没有尝试你的解决方案。明天应该更新吗?对不起,这是一个“一步一步”的处理过程,在循环内部提交(booo)的情况下,这会影响性能-1从长远来看,使用rationalSpring在另一个答案中建议的WHERE更新可以更好地扩展。(嗯,刚刚注意到这上面的日期?为什么仪表板会向我显示这一点,好像它是最近的?哦哦,好的)