Oracle 10g使用游标更新或删除数据

在定义又表示必须要带有for update子句,用于在游标结果集数据上加行共享锁,以防止其他用户在相应行上执行dml操作;当select语句引用到多张表时,使用of子句可以确定哪些表要加锁,如果没有of子句,则会在select语句所引用的全部表上加锁;nowait子句用于指定不等待锁。在提取了游标数据之后,为了更新或删除当前游标行数据,必须在update或delete语句中引用where current of 子句。
--1、使用游标更新数据

declare
cursor emp_cursor is
--加行共享锁
select t.name,t.english_name from communitytype t for update;
--定义变量
v_name communitytype.name%type;
v_enname communitytype.english_name%type;
begin
--打开游标
open emp_cursor;
loop
fetch emp_cursor into v_name,v_enname;
exit when emp_cursor%notfound;
if v_name = '电子图书' then
update communitytype c
set c.english_name = 'ebook'
where current of emp_cursor;
end if;
end loop;
close emp_cursor;
commit;
end;

--2、使用游标删除数据,同上只需要将更新语句换成删除语句
--3、使用of子句在特定表上加行共享锁

declare
cursor emp_cursor is
--加行共享锁
select t.name,t.english_name from communitytype t for update of t.name;
--定义基于游标的记录变量
emp_record emp_cursor%rowtype;
begin
--打开游标
open emp_cursor;
loop
fetch emp_cursor into emp_record;
exit when emp_cursor%notfound;
if emp_record.name = '电子图书' then
update communitytype c
set c.english_name = 'ebook'
where current of emp_cursor;
end if;
end loop;
close emp_cursor;
commit;
end;

--4、默认情况下当前会话要一直等待对方释放锁,使用nowait子句可以避免等待锁

declare
cursor emp_cursor is
--加行共享锁
select t.name,t.english_name from communitytype t for update nowait;
--定义基于游标的记录变量
emp_record emp_cursor%rowtype;
begin
--打开游标
open emp_cursor;
loop
fetch emp_cursor into emp_record;
exit when emp_cursor%notfound;
if emp_record.name = '电子图书' then
update communitytype c
set c.english_name = 'ebook'
where current of emp_cursor;
end if;
end loop;
close emp_cursor;
commit;
end;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值