Oracle实现银行取现事务 RT,求大神 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --写个存储过程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; 高手 for update 一定要加 请教oracle恢复问题 存储过程操作同义词 请推荐你认为最好的两本oracle教材及两本oracle参考资料,请不要多推荐 为什么oralce不提倡使用in或者or来查询啊????? oracle登陆求救 求一sql的编写! 怎么在Oracle9中合并多列 请教高手:oracle如何导入?(在线等待,解决马上给分) 有关与数据库连接的问题 各位csdn的xdjm,跪求oracle数据库问题,在线等,给分不是问题 Sqlserver的存储过程如何变成在Oracle下可以执行的 请高手指明下怎么跟踪?包括存储过程和SQL
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;