gsw110
2011-05-22 15:47
浏览 496

oracle里有没有其他方法替代游标

存储过程内使用了游标遍历数据,需要对数据进行更新。
当多用户同时请求时,多个session的游标查询的数据可能重复,游标锁定了数据,
第一个用户 更新了数据,
后面用户可能会覆盖前一个用户更新的数据。
需要频繁查询数据,考虑到性能方面,希望用存储过程完成数据处理。
有没有其他方法替代游标呢?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • iteye_8576 2011-05-23 14:58
    已采纳

    和游标没有关系了,看个例子
    [code="sql"]SELECT *
    FROM aa t
    WHERE num <= 40
    ORDER BY num DESC[/code]
    结果:
    1 40
    1 30
    2 10
    [code="sql"]SELECT *
    FROM aa t
    WHERE num <= 30
    ORDER BY num DESC
    FOR UPDATE SKIP LOCKED[/code]

    结果:
    1 30
    2 10
    [code="sql"]SELECT *
    FROM aa t
    WHERE num <= 40
    ORDER BY num DESC
    FOR UPDATE SKIP LOCKED[/code]
    结果:
    1 40

    已采纳该答案
    打赏 评论
  • iteye_8576 2011-05-22 16:03

    没太明白,既然游标锁定了数据,一个用户更新,其他用户还能更新吗?

    打赏 评论
  • iteye_8576 2011-05-22 17:19

    你的问题是性能问题呢,还是不允许其他用户重复更新数据?

    打赏 评论
  • xiewanxw 2011-05-23 13:49

    oracle里面存储过程是异步的吗?
    应该是同步的吧!

    打赏 评论
  • iteye_8576 2011-05-23 14:50

    查询中使用 update skip locked,当其他用户查询被锁的记录的时候,会跳过这条记录。

    打赏 评论

相关推荐 更多相似问题