oracle写会阻塞读吗,oracle读不阻塞写带来的问题

1.oracle 读是不会阻塞写的;写也不会阻塞读;只有修改同一行数据的时候,两个写操作才会发生阻塞,这种情况下,只有写1提交了,写2才能操作。

2.读写互相不阻塞,这会带来一个问题。

如果想确保某些时刻,资源只能被一个用户访问,你需要多做些事情。打个比方,你上厕所的时候,不需要有人打扰吧,这时候你应该怎么办?把门锁上。oracle也这样。下面用一个例子说明。

create table resources(name varchar2(20) primary key);

create table schedules(resource_name varchar2(20),start_date date not null,end_date date not null,check(start_date < end_date),primary key(resource_name,start_date));

insert into resources values('厕所');

过程:

procedure schedule_resource(i_resource_name in varchar2,

i_start_date    in date,

I_end_date      in date) as

v_count         number;

v_resource_name resources.name%type;

begin

select name

into v_resource_name

from resources re

where re.name = i_resource_name

for update;

select count(1)

into v_count

from schedules sc

where sc.resource_name = v_resource_name

and sc.start_date <= I_end_date

and sc.end_date >= i_start_date;

if v_count <> 0 then

raise_application_error(-20000, 'Rome is busy!');

end if;

insert into schedules

(resource_name, start_date, end_date)

values

(i_resource_name, i_start_date, i_end_date);

end schedule_resource;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值