gpt4 book ai didi

sql - 如果游标只返回一个 count(*) 行,我可以锁定游标中的行吗?

转载 作者:行者123 更新时间:2023-12-04 23:32:34 25 4
gpt4 key购买 nike

我想限制用户使用 color = 'Red' 插入超过 3 条记录在我的 FOO 表中。我的意图是 A) 检索当前计数,以便我可以确定是否允许另一条记录,以及 B) 防止任何其他进程在此记录正在进行时插入任何红色记录,因此 for update of .

我想做类似的事情:

cursor cur_cnt is
select count(*) cnt from foo
where foo.color = 'Red'
for update of foo.id;

这会满足我的两个要求,还是不会只锁定 count(*) 中拥有 foo.color = 'Red' 的行? ?

最佳答案

这只会阻止用户更新所选行,而不是添加新行。可靠地强制执行此类规则的唯一方法是结合检查约束(在“主”表上)和更新主表的“foo”表上的触发器。像这样(使用 EMP 和 DEPT 来熟悉):

alter table dept add (manager_count integer default 0 not null,
constraint manager_count_chk check (manager_count <= 3));

create trigger emp_trg
before insert or update or delete on emp
for each row
begin
if inserting or updating then
if :new.job = 'MANAGER' then
update dept
set manager_count = manager_count+1
where deptno = :new.deptno;
end if;
end if;
if updating or deleting then
if :old.job = 'MANAGER' then
update dept
set manager_count = manager_count-1
where deptno = :new.deptno;
end if;
end if;
end;

这通过防止多个用户一次插入、更新或删除“MANAGER”员工来实现所需的锁定。

关于sql - 如果游标只返回一个 count(*) 行,我可以锁定游标中的行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3070838/

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