oracle存储过程加锁

项目用到了weblogic集群,导致应用调用存储过程时发生了冲突。

把下面存储过程中的话加到你想要加锁的业务前后即可。

create or replace procedure testp  is
    LN   number;
    jcr_lockhandle   varchar2(128);
  begin
     
      DBMS_LOCK.allocate_unique('Lock', jcr_lockhandle);--针对当前session加锁

   LOOP
      LN := DBMS_LOCK.request ( jcr_lockhandle, TIMEOUT => 0);

      IF LN NOT IN (0, 4)--判断是否被别session锁住
      THEN
         DBMS_OUTPUT.put_line ('Already run...');
         DBMS_LOCK.sleep (2);--已经被人锁住,休眠2秒
      ELSE
         EXIT;--没有锁,退出轮询
      END IF;
   END LOOP;

dbms_output.put_line('1');  ----你要加锁的业务逻辑哦


LN := DBMS_LOCK.release ( jcr_lockhandle);--释放资源

  end ;

猜你喜欢

转载自salouhim.iteye.com/blog/1537418