RT,求大神

解决方案 »

  1.   

    --写个存储过程
    CREATE OR REPLACE PROCEDURE getMoney(i_cardno VARCHAR2, i_amount NUMBER) IS
      --参数i_cardno:卡号,i_amount:取款金额
      v_balance NUMBER(10, 2); --余额
    BEGIN
      --查询并锁住取款帐号只能串行操作
      SELECT balance INTO v_balance FROM fee WHERE cardno = i_cardno FOR UPDATE;
      --判断余额
      IF v_balance >= i_amount THEN
        --取款
        UPDATE fee SET balance = balance - i_amount WHERE cardno = i_cardno;
        --提交释放锁
        COMMIT;
      ELSE
        --回滚释放锁
        ROLLBACK;
        --抛出余额不足异常
        raise_application_error(-20001, 'not enough money!');
      END IF;
    END;
      

  2.   

    高手   for update  一定要加