oracle.for update,更新游标,cursor

本文介绍 Oracle 数据库中 PL/SQL 的 FOR UPDATE 子句使用方法,通过示例展示了如何在 SELECT 语句中使用 FOR UPDATE 来锁定记录,并在后续的 UPDATE 语句中更新这些记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2007/6/1
oracle dml select for update syntax examples
在多数情况下,提取循环中所完成的处理都会修改由游标检查出的行,PL/SQL提供了进行这样处理的一种语法。
这种语法包括两部分——在游标声明部分的FORUPDATE子句和在UPDATE或DELETE语句中的WHERECURRENTOF子句。
通常,SELECT操作将不会对正处理的行执行任何锁定设置,这使得连接到该数据库的其他会话可以改变正在选择的数据。
但是,结果集仍然是一致性的。当确定了活动集以后,在执行OPEN的时刻,ORACLE会截取下该表的一个快照。在此时刻以前所提交的任何更改操作都会在活动集中反映出来。在此时刻以后所进行的任何更改操作,即使已经提交了它们,都不会被反映出来,除非将该游标重新打开。但是使用FORUPDATE子句,在OPEN返回以前的活动集的相应行上会加上互斥锁,这些锁会避免其他的会话对活动集中的行进行更改。直到整个事务被提交为止。

示例:
DECLARE
CURSORC_CURISSELECT*FROMSTUDENDSFORUPDATEOFXM;
BEGIN
OPENC_CUR;
WHILEC_CUR%FOUNDLOOP

UPDATESTUDENDSSETXM='AA'||XMWHERECURRENTOFC_CUR;

ENDLOOP;
CLOSEC_CUR;
COMMIT;
END;


需要注意的是:1、UPDATE语句仅更新在游标声明的FORUPDATE子句处列出的列。如果没有列出任何列,那么所有的列都可以更新。
2、示例中的COMMIT是在提取循环完成以后才完成的,因为COMMIT将释放由该会话持有的所有锁。因为FORUPDATE子句获得了锁,所以COMMIT将释放这些锁。当锁释放了,该游标就无效了。所以后继的提取操作都将返回ORACLE错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值