gpt4 book ai didi

Oracle 存储过程线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 22:00:39 24 4
gpt4 key购买 nike

伪代码:

  • 开始存储过程
  • 提交
  • 检查 a 行第 1 列的值//step 1
  • 更新 a 行的第 1 列//步骤 2
  • 提交
  • 结束存储过程

  • 这个 sp 线程安全吗?

    编辑:
    Declare
    tag_rec prep_tag%ROWTYPE;
    begin

    COMMIT;

    SELECT * INTO tag_rec
    FROM PREP_TAG
    WHERE project = 'a' and categoryId = 'b';

    if tag_rec.locked = 'No' then

    UPDATE prep_tag
    SET locked = 'Yes'
    WHERE TAG_NUMBER = tag_rec.TAG_NUMBER;

    end if;

    COMMIT;

    end;

    这个 sp 线程安全吗?线程 A 是否有可能检查 tag_rec.locked = 'No' 那么它即将更新它。但在此之前,线程 B 潜入并看到 tag_rec.locked = 'No'?

    最佳答案

    对您的问题的简短回答是否定的,这不是线程安全的。其他一些 session 可能会进入并在您的 SELECT 和您的 UPDATE 语句之间更新 prep_tag。

    长的答案是你这样做是错误的。听起来您想更新这些记录的锁定字段。你也可以这样做:

    UPDATE prep_tag SET locked = 'Yes' 
    WHERE project = 'a'
    AND categoryId = 'b'
    AND locked = 'No'

    一个声明,它保证是原子的。

    另外,我建议不要在你的区块内提交,假设这个交易还有更多。

    关于Oracle 存储过程线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194612/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com