问题描述
嗨,汤姆,
我是Oracle的初学者。我想在存储过程中更新记录时锁定这些记录。同时,如果任何其他用户试图取得相同的记录,但被锁定,我将不允许他取得该记录。根据我的知识,我可以使用“Select... for Update of...”和“更新跳过锁定”。“更新跳过锁定”将提供未锁定的记录,并锁定提取的记录。现在,我的问题是,如果我们通过一个主键获取一条记录,而第二个会话也尝试提取同一记录,那么第二个查询会返回到游标中吗?空?
谢谢
巴努。
我是Oracle的初学者。我想在存储过程中更新记录时锁定这些记录。同时,如果任何其他用户试图取得相同的记录,但被锁定,我将不允许他取得该记录。根据我的知识,我可以使用“Select... for Update of...”和“更新跳过锁定”。“更新跳过锁定”将提供未锁定的记录,并锁定提取的记录。现在,我的问题是,如果我们通过一个主键获取一条记录,而第二个会话也尝试提取同一记录,那么第二个查询会返回到游标中吗?空?
谢谢
巴努。
专家解答
选择以进行更新
-成功的人获取记录并将其锁定
-不成功的人将永远等待,直到第一个人提交/回滚。
选择更新等待'n'
-成功的人获取记录并将其锁定
-不成功的人等待最多'n'秒,如果在此之前不成功,则会出现错误
立即选择进行更新
-成功的人获取记录并将其锁定
-不成功的人如果不成功,将立即得到一个错误
选择更新跳过锁定
-成功的人获取记录并将其锁定
-不成功的人也会读取记录,然后尝试在每个记录上锁定。任何已锁定的记录都将从结果集中转储。所以他们不会得到一个错误,他们可能只是得到“没有返回的行”
希望这个能帮上忙。
-成功的人获取记录并将其锁定
-不成功的人将永远等待,直到第一个人提交/回滚。
选择更新等待'n'
-成功的人获取记录并将其锁定
-不成功的人等待最多'n'秒,如果在此之前不成功,则会出现错误
立即选择进行更新
-成功的人获取记录并将其锁定
-不成功的人如果不成功,将立即得到一个错误
选择更新跳过锁定
-成功的人获取记录并将其锁定
-不成功的人也会读取记录,然后尝试在每个记录上锁定。任何已锁定的记录都将从结果集中转储。所以他们不会得到一个错误,他们可能只是得到“没有返回的行”
希望这个能帮上忙。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




