1 if object_id(N'usp_transfer', N'P') is not null
 2     drop proc usp_transfer
 3 GO
 4 create proc usp_transfer
 5 @from char(4),    ----转账人
 6 @to char(4),    --收账人
 7 @balance money,    --转账金额
 8 @resultNumber int output    --转账结果(1表示成功,2表示失败,3表示余额不足)
 9 as
10 begin
11     --1.判断转账人余额是否足够
12     declare @money money
13     select @money = balance from bank where cid = @from
14     if(@money - @balance >= 10)
15     begin
16         --开始转账
17         begin transaction --开始事务
18             declare @sum int = 0  --用于统计错误,初始值为0
19             --2.转账人扣钱
20             update bank set balance = balance - @balance where cid = @from
21             set @sum = @sum + @@error   -- 如果有错误,则错误累加
22             --3.收账人收钱
23             update bank set balance = balance + @balance where cid = @to
24             set @sum = @sum + @@error    --如果有错误,则错误累加
25             --4.判断是否执行成功,进行提交或回滚
26             if @sum <> 0
27             begin
28                 set @resultNumber = 2    --转账失败
29                 rollback    --事务回滚
30             end
31             else
32             begin
33                 set @resultNumber = 1    --转账成功
34                 commit    --事务提交
35             end
36     end
37     else
38     begin
39         set @resultNumber = 3    --余额不足
40     end
41 end
42 go

执行

1 declare @resultN int
2 exec usp_transfer @from = '0001',@to = '0002',@balance = 900,@resultNumber = @resultN output
3 print @resultN

转载于:https://www.cnblogs.com/fanqisoft/p/10811948.html

案例银行转账存储过程相关推荐

  1. 数据库工程开发秘籍之TSQL 存储过程user stored procedure的概念与案例实战

    TSQL存储过程概念与案例实战 存储过程 存储过程由一个或多个 T-SQL 语句或对.NET公共语言运行时 (CLR) 方法的引用所构成的一组程序块.这里的T-SQL语句包括执行DDL.DML语句.应 ...

  2. Java存储过程调用CallableStatement

    什么是存储过程? 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有 ...

  3. MySQL视图、事务与存储过程

    一.可视化工具的使用方法 简述:首先我们使用数据库可视化工具是为了让我们在建立数据库的时候能够减少代码的书写从而提升我们编写程序的效率,而我使用的是Navicat工具是因为使用它基本为无脑操作我就不过 ...

  4. SQL Server 2014 Win7 Win10 安装详解 SQL Server 2017 2019 Linux及SQL TSQL ETL实用案例

    SQL Server 2014安装图解与问题分析 简介 SQL Server2014 是Microsoft 公司推出的关系    型数据库管理系统.它用于大规模联机事务处理(OLTP).数据  仓库和 ...

  5. Oracle 存储过程 in、out、in out 参数的使用方法

    1. in 参数 用于接收参数,在子程序内部,不能进行修改.默认的参数模式:in 案例: -- 声明存储过程 create or replace procedure pro_in(p_num in n ...

  6. MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

    目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysq ...

  7. MySQL存储过程(CREATE PROCEDURE 存储过程名(参数列表))

    MySQL存储过程 #存储过程 /* 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 * ...

  8. 银行转账问题(死锁)

    本文主要讲述死锁的一个经典案例-银行转账问题,并对该问题进行定位.修复. 1. 问题说明 当账户A对账户B进行转账时, 首先需要获取到两把锁:账户A和账户B的锁. 获取两把锁成功,且余额大于0,则扣除 ...

  9. jdbc连接数据scanip_java数据库连接_jdbc

    1. jdbc 概述 问题:实际开发中,不可能用工具或者命令行操作数据库,数据库表中的数据最终要使用Java程序来操作,那么Java中如何操作数据库中的数据呢? 答 : 在Java语言中,有一个专门连 ...

最新文章

  1. Executor详细介绍 打造基于Executor的Web服务器
  2. 在 Excel 2016 for Windows 中启用 Power View
  3. Python 代码实现模糊查询
  4. 单例带来的线程安全问题
  5. corutine rust_Rust学习笔记#5:函数和trait
  6. 科普文丨Java 单元测试相关概念理清
  7. 第七章数组答案C语言,C语言复习题及答案-第七章-数组
  8. linux打开另一台linux的图形化,【工具大道】ssh登录Linux服务器,并显示图形化界面...
  9. glob.glob() + os.path.join() :找到文件路径,拼接路径
  10. java中的 FileWriter类 和 FileReader类的一些基本用法
  11. 小写数字转大写_不得不说的Excel小技巧:设置单元格格式将小写金额转换成大写...
  12. Penn Treebank词性标记集
  13. python爬虫课程设计摘要_爬虫课程设计(爬虫代码)
  14. Jboss 中配置 Oracle数据源
  15. 参考阿里云DMS快速开发数据管理平台
  16. ArcGIS空间分析笔记(汤国安)
  17. 扩增子图表解读2散点图:组间整体差异分析(Beta多样性)
  18. 计算机本地连接无internet访问权限,Win7本地连接IPV4无访问权限怎么解决?
  19. Java面试之多线程:Java创建多线程为什么只有一种方式?
  20. 相机PHP,C/C++、C#、PHP相机开发实例 大恒相机SDK

热门文章

  1. 数显之家快讯:深圳华强北再添科技新物种-55寸双面旋转LED导向指示牌
  2. set_global_opts使用说明
  3. 怎样把扫描的图片做成PDF文件
  4. 计算机专业需要考英语口语吗,既不考数学也不考英语,这些考研专业你知道吗?...
  5. 【数据结构】图—克鲁斯卡尔算法(原理及C程序详解)
  6. c++小游戏大合集(1)
  7. matlab安装Robotics Toolbox 机器人工具箱
  8. STM32F407与STM32F105 CAN通讯失败的定位解决
  9. 使用PHPMailer实现PHP通过QQ邮箱发邮件功能
  10. 前端HTML弹窗的实现