经典存储过程;SQl 存储过程

利用存储过程来实现下面的应用: 

从一个账户转指定数额的款项到另一个账户中。

*/ 建表:create table account(accountnum int,uname char(10),total float)             

insert into account values(1001,'u1',50000)            

 insert into account values(1002,'u2',1000)             

 select * from account 


建存储过程:  

CREATE PROCEDURE TRANSFER  

@outAccount int, 

@inAccount int, 

@amount 

FLOAT AS 


     DECLARE  @totalDeposit FLOAT    

BEGIN TRANSACTION                  /* 检查转出账户的余额 */                             SELECT @totalDeposit=total FROM ACCOUNT WHERE ACCOUNTNUM=@outAccount     

    IF @totalDeposit IS NULL    /* 转出账户不存在或账户中没有存款 */       BEGIN                 ROLLBACK TRANSACTION          

    PRINT '转出账户不存在或账户中没有存款,不能操作!' 

 RETURN       

END       


IF @totalDeposit<@amount   /* 转出账户存款不足 */       

BEGIN          

ROLLBACK TRANSACTION          

PRINT '转出账户存款不足,不能操作!'                                /*  建议使用函数RAISERROR('转出账户存款不足,不能操作!',10,1)   */          

RETURN  

END


IF exists(SELECT * FROM ACCOUNT WHERE ACCOUNTNUM=@inAccount )    /* 检查转入账户是否存在 */        BEGIN                             

UPDATE account SET total=total-@amount WHERE ACCOUNTNUM=@outAccount                              /* 修改转出账户,减去转出额 */          

UPDATE account SET total=total+@amount WHERE ACCOUNTNUM=@inAccount                                                   /* 修改转入账户,增加转出额 */          

COMMIT TRANSACTION                 /* 提交转账事务 */          

PRINT '转账成功,谢谢使用本存储过程!'          

RETURN         

END     


ELSE        

BEGIN           

ROLLBACK TRANSACTION            

PRINT '转入账户不存在,不能操作!'          

RETURN        

END 


你可能感兴趣的:(模拟银行存储过程,经典存储过程)