我在一个存储过程要怎么加锁,每次只能由一个用户其他用户执行,然后其他的用户要等待?

解决方案 »

  1.   

    可以这样:
    建立过程A 准备调用过程B
    create procedure A is
    begin
    update table set column = ....;
    exex B;
    commit;
    end;
    /
    这样就可以了
      

  2.   

    上面写的只是伪代码 执行update时会加锁 当你在执行A时(A中执行B)别人只能等待 
    直到你调用B结束后commit
      

  3.   

    CREATE PROCEDURE proc_A IS
    BEGIN
      --手工加锁(只有一个用户能成功,其它用户必须等待)
      SELECT * FROM temp FOR UPDATE; --temp表用于加锁
      --调用proc_B
      proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务
      --提交并释放表锁
      COMMIT;
      --其它用户可以调用proc_B
    END;
      

  4.   

    CREATE PROCEDURE proc_A IS
    BEGIN
      --手工加锁(只有一个用户能成功,其它用户必须等待)
      SELECT * FROM temp FOR UPDATE; --temp表用于加锁
      --调用proc_B
      proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务
      --提交并释放表锁
      COMMIT;
      --其它用户可以调用proc_B
    END;