Oracle11g 如何在oracle中同时选择和更新
我想选择一些行,并在另一个线程来取它之前,立即将该行中的进程列更新为“Y” 如何在Oracle中执行此操作 最初,我有一个select for update查询,但它不起作用。在多线程模式下实现这一点的方法有哪些 我正在使用Oracle,在此论坛中找不到与Oracle相关的答案 请帮助oracle中的“RETURNING”子句可以做到这一点Oracle11g 如何在oracle中同时选择和更新,oracle11g,Oracle11g,我想选择一些行,并在另一个线程来取它之前,立即将该行中的进程列更新为“Y” 如何在Oracle中执行此操作 最初,我有一个select for update查询,但它不起作用。在多线程模式下实现这一点的方法有哪些 我正在使用Oracle,在此论坛中找不到与Oracle相关的答案 请帮助oracle中的“RETURNING”子句可以做到这一点 INSERT INTO <table> (c1, c2, .., cn) VALUES (v1, v2, .., vn) 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更新可以更好地扩展。(嗯,刚刚注意到这上面的日期?为什么仪表板会向我显示这一点,好像它是最近的?哦哦,好的)