gpt4 book ai didi

plsql - 仅使用光标选择行一次

转载 作者:行者123 更新时间:2023-12-04 02:24:49 25 4
gpt4 key购买 nike

我在 PL/SQL 中有一个情况,我的过程每分钟都会被一个作业调用。代码如下

procedure ExecuteProc is
CURSOR c1 IS
SELECT *
FROM test6
where processed = 'N';
BEGIN

-- Make all rows selected in the cursor processed 'Y' but
-- the cursor below would fail

for rec in c1
loop
-- some proccessing which takes 5 -6 minutes
delete from test6 where id = rec.id;
end loop;
END;

test6 表中的示例数据

id  processed
1 N
2 N
3 N

当第一次调用过程时,id 1,2 和 3 被游标中的过程拾取。请注意,这些行也存在于表 test6 中,除非每个 id 的处理都已完成。这意味着当在下一分钟第二次调用该过程时,该过程将再次选择 1,2 和 3。我怎样才能避免这种情况?我正在考虑以某种方式将“已处理”字段设置为“Y”,但是(请参阅我在光标会失败的代码中的评论)。

请帮忙

最佳答案

尝试在删除之前锁定该行:

procedure ExecuteProc is
CURSOR c1 IS
SELECT *
FROM test6
where processed = 'N';
BEGIN

-- Make all rows selected in the cursor processed 'Y' but
-- the cursor below would fail

for rec in c1
loop
if rec.processed <> 'L' then


-- some proccessing which takes 5 -6 minutes
update test6 set processed ='L' where id = rec.id; -- lock status
delete from test6 where id = rec.id;
end if;
end loop;
END;

您一定会删除正确的。但是您必须优化处理过程背后的过程调用。

关于plsql - 仅使用光标选择行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22985852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com