楼主: berbang

[精华] 关于cursor中的for update关键字

[复制链接]
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
21#
发表于 2004-8-19 20:30 | 只看该作者
有道理

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
9
授权会员
日期:2005-12-23 16:28:18会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44铁扇公主
日期:2007-10-26 16:08:47生肖徽章2007版:鸡
日期:2008-01-02 17:35:532009新春纪念徽章
日期:2009-01-04 14:52:282009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
22#
发表于 2004-8-20 13:30 | 只看该作者

学习!

到这里来学习!

使用道具 举报

回复
论坛徽章:
0
23#
发表于 2004-10-24 18:43 | 只看该作者
WHERE CURRENT OF WHERE CURRENT OF YOUR_CURSOR_NAME[/COLOR] 其实还是很有用的,特别是在循环游标中。

例如:需要把所有job=SALESMAN的加5%的工资。
=CLERK的加10%的工资。
=MANAGER加15%的工资。


  1. declare
  2.   cursor myc is
  3.     select * from emp for update;
  4. begin
  5.   for v_row in myc loop
  6.     if v_row.job='SALESMAN' then
  7.       update emp set sal=sal*1.05 where current of myc;
  8.     elsif v_row.job='CLERK' then
  9.       update emp set sal=sal*1.10 where current of myc;
  10.     elsif v_row.job='MANAGER' then
  11.       update emp set sal=sal*1.15 where current of myc;
  12.     end if;
  13.   end loop;
  14.   commit;
  15. exception
  16.   when others then
  17.      rollback;
  18.      raise;
  19. end;
复制代码

使用道具 举报

回复
论坛徽章:
9
生肖徽章:马
日期:2006-09-07 17:03:04会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB9周年纪念徽章
日期:2010-10-08 09:32:27
24#
发表于 2004-10-25 19:24 | 只看该作者
good

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2004-12-12 19:21 | 只看该作者

thanks

thanks

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
9
授权会员
日期:2005-12-23 16:28:18会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44铁扇公主
日期:2007-10-26 16:08:47生肖徽章2007版:鸡
日期:2008-01-02 17:35:532009新春纪念徽章
日期:2009-01-04 14:52:282009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
26#
发表于 2004-12-13 17:48 | 只看该作者
向各位高手学习了!

使用道具 举报

回复
论坛徽章:
0
27#
发表于 2004-12-13 23:51 | 只看该作者
使用FOR UPDATE子句是在游标检索时锁定检索到的行,并对应数据库中的物理行,其中后半句是核心。如果是真正的UPDATE,应该在指明UPDATE子句后使用where current of . 确切的说for update 是为update做检索准备。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
28#
发表于 2005-2-7 15:05 | 只看该作者

Re: 我认为:

此xd所得对。for update of字段,这个字段是在从多表中选择时,表示锁定哪个表的记录。若是多个表的记录都需要锁定,则可以把多个表中的字段(每个表任选一个字段)都放在里面。

最初由 wkwjamo 发布
[B]1、语法:
         select ...
                  from ...
                  where ...
                  for update (of ...) nowait;  --of...是可选的
2、for update 后跟of column1, 作用是当select from 多个表时, 只锁住column1所在的表。
3、关于锁,可以声明一个exception
     -- Resource Busy
      e_res_busy exception;
      pragma exception_init(e_res_busy, -54);
      然后在exception处理中捕捉此exception, 再作相应处理 [/B]

使用道具 举报

回复
论坛徽章:
0
29#
发表于 2005-5-17 17:19 | 只看该作者
sqlserver中的cursor也有这种语法(for update以及更新时where current of,但查不到说明,是不是同oracle的用法一样?

使用道具 举报

回复
论坛徽章:
0
30#
发表于 2005-5-17 18:52 | 只看该作者
好贴
更加领会了for update在cursor中的作用

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表