注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

伯纳乌の夢

可以挽回么?我们按“ Ctrl+Z”撤销掉吧。对不起啦~~

 
 
 

日志

 
 
 
 

SELECT FOR UPDATE  

2008-10-21 21:18:22|  分类: Oracle/SQLServer |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

SELECT  FOR  UPDATE  光标为了对正在处理(查询) 的行不被另外的用户改动,oracle 提供一个 FOR UPDATE 子句来对所选择的行进行锁住。语法如下:SELECT . . . FROM  FOR UPDATE [OF column_reference] [NOWAIT]如果另一个会话已对活动集中的行加了锁,那么 SELECT  FOR UPDATE操作一直等待到其它的会话释放这些锁后才继续自己的操作,对于这种情况,如果加 NOWAIT 子句,如果这些行真的被另一个会话锁定,则OPEN 立即返回并给出:ORA-0054 :resource busy  and  acquire with NOWAIT specified.     如果 使用 FOR UPDATE 声明光标,则可在delete, update 语句中使用WHERE CURRENT OF 子句。

如:DECLARE   V_NumCreadits  classes.num_creadits%TYPE; 

 CURSOR  c_RegisteredStudents  IS    

SELECT *  FROM students        

 WHERE  is  IN ( SELECT student_id from registered_students  WHERE department = ‘HIS’ AND course = 101 )          FOR UPDATE OF current_credits;

BEGIN    

 FOR  v_Studentinfo  IN c_RegisteredStudents 

LOOP    

SELECT  num_credits  INTO v_numcredits  FROM  classes   WHERE  department ='HIS'  AND  course=101;   

UPDATE  students SET  current_credits = current_credits   v_numcredits     

WHERE  CURRENT OF c_RegusteredStudents;  

END LOOP;

COMMIT;

END;

  评论这张
 
阅读(100)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018