Mysql调试存储过程最简单的方法

以前同事告诉我用临时表插入变量数据来查看,但是这种方法过于麻烦,而且Mysql没有比较好的调试存储过程的工具。今天google了下发现可以用select + 变量名的方法来调试。。。真是让我汗颜啊。

具体方法:

在你的存储过程中加入如下语句: 
SELECT 变量1,变量2;

然后用mysql自带的cmd程序进入mysql> 下。 
call 你的存储过程名(输入参数1,@输出参数);(注:这里帮助下新同学,如果你的存储过程有输出变量,那么在这里只需要加 @ 然后跟任意变量名即可); 
即可发现你的变量值被打印到了cmd下,简单吧?
========

创建mysql中的“存储过程”及创建后调试该“存储过程”的方法

1.创建一个名为“p_buyByCash1”的存储过程,创建如下:
CREATE DEFINER=`3dmodelbaseadmin`@`%` PROCEDURE `p_buyBycash1`(
in p_cMEMID INT UNSIGNED,
in p_curTotal DECIMAL(10,2),
in p_cMIDGroup varchar(6000),
in p_lDateTime DATETIME,
in p_transactionID char(100),
in p_orderID char(100),
in p_remarks char(100),
in p_transactionID_site char(100),
in p_remarks_site char(100),
in p_sellerID INT UNSIGNED,
in p_royalty float,
in p_translation float,
in p_loginName_site varchar(50))
BEGIN

DECLARE p_cMEMID_site INT;
DECLARE p_balance_site DECIMAL(10,2);
DECLARE p_balance DECIMAL(10,2);

set p_cMEMID_site=(select cMEMID from m_member where cLoginName=p_loginName_site);

UPDATE m_MemberMoney SET cMoney=cMoney-p_curTotal,
cDownModelTotal=cDownModelTotal+1 WHERE cMEMID=p_cMEMID;

UPDATE m_memberMoney SET cMoney= cMoney+p_curTotal WHERE cMEMID = p_cMEMID_site;

set p_balance_site = (select cMoney from m_memberMoney where cMEMID=p_cMEMID_site);
set p_balance = (select cMoney from m_memberMoney where cMEMID=p_cMEMID);

INSERT INTO cashDetail(transactionID,orderID,transactionTime,direction,remarks,income,expense,balance,cMEMID)
values(p_transactionID,p_orderID,p_lDateTime,1,p_remarks,0,p_curTotal,p_balance,p_cMEMID);

INSERT INTO cashDetail(transactionID,orderID,transactionTime,direction,remarks,income,expense,balance,cMEMID)
values(p_transactionID_site,p_orderID,p_lDateTime,0,p_remarks_site,p_curTotal,0,p_balance_site,p_cMEMID_site);

INSERT INTO l_MemberDownLog(cMEMID,lState,lIntegral,lMoney,lDateTime,cMIDGroup,orderID,sellerID,royalty,
translation,cashOrPoints,endTime,refundTime,evaluation,comments,commentTime,commentState)
values(p_cMEMID,0,0,p_curTotal,p_lDateTime,p_cMIDGroup,p_orderID,p_sellerID,p_royalty,
p_translation,0,NULL,NULL,0,NULL,NULL,0);

END

注:declare声明需放在sql操作(insert、select等)的最前面;

2.创建之后怎样验证创建的存储过程是否正确,下面提供一种调试方法:
通过mysql的控制台:“MySQL Command Line Client”,进行调试。
直接 select 变量; 就可用在控制台输出。
在p_buyByCash存储过程中添加几个select 变量,来查看变量的输出是否正确,修改后如下:
CREATE DEFINER=`3dmodelbaseadmin`@`%` PROCEDURE `p_buyBycash1`(
in p_cMEMID INT UNSIGNED,
in p_curTotal DECIMAL(10,2),
in p_cMIDGroup varchar(6000),
in p_lDateTime DATETIME,
in p_transactionID char(100),
in p_orderID char(100),
in p_remarks char(100),
in p_transactionID_site char(100),
in p_remarks_site char(100),
in p_sellerID INT UNSIGNED,
in p_royalty float,
in p_translation float,
in p_loginName_site varchar(50))
BEGIN

DECLARE p_cMEMID_site INT;
DECLARE p_balance_site DECIMAL(10,2);
DECLARE p_balance DECIMAL(10,2);

set p_cMEMID_site=(select cMEMID from m_member where cLoginName=p_loginName_site);

select p_cMEMID_site;

UPDATE m_MemberMoney SET cMoney=cMoney-p_curTotal,
cDownModelTotal=cDownModelTotal+1 WHERE cMEMID=p_cMEMID;

UPDATE m_memberMoney SET cMoney= cMoney+p_curTotal WHERE cMEMID = p_cMEMID_site;

set p_balance_site = (select cMoney from m_memberMoney where cMEMID=p_cMEMID_site);
set p_balance = (select cMoney from m_memberMoney where cMEMID=p_cMEMID);

select p_balance_site;
select p_balance;

INSERT INTO cashDetail(transactionID,orderID,transactionTime,direction,remarks,income,expense,balance,cMEMID)
values(p_transactionID,p_orderID,p_lDateTime,1,p_remarks,0,p_curTotal,p_balance,p_cMEMID);

INSERT INTO cashDetail(transactionID,orderID,transactionTime,direction,remarks,income,expense,balance,cMEMID)
values(p_transactionID_site,p_orderID,p_lDateTime,0,p_remarks_site,p_curTotal,0,p_balance_site,p_cMEMID_site);

INSERT INTO l_MemberDownLog(cMEMID,lState,lIntegral,lMoney,lDateTime,cMIDGroup,orderID,sellerID,royalty,
translation,cashOrPoints,endTime,refundTime,evaluation,comments,commentTime,commentState)
values(p_cMEMID,0,0,p_curTotal,p_lDateTime,p_cMIDGroup,p_orderID,p_sellerID,p_royalty,
p_translation,0,NULL,NULL,0,NULL,NULL,0);

END

然后进入命令行:
执行 call "这儿写数据库的名字".p_buyByCash1(20,0.85,'20111012','2011-6-20 10:09:56','20201012','10151012','buy the goods','4567891012','buyer buy',20,0.16,0,'article');即可
下面是我执行的结果:
创建mysql中的“存储过程”及创建后调试该“存储过程”的方法

3.下面再给出一个可以自己测试的小例子:
小测试:
CREATE  PROCEDURE `test`()
begin
  declare a varchar(10);
  set a = "test";
  select a;
  select a;
end;

然后进入命令行:
执行 call test();即可
========

MySQL存储过程调试工具

http://blog.csdn.net/dyllove98/article/details/8873315

工具官网地址:http://www.devart.com/dbforge/mysql/studio/

对于某些存储过程很多且复杂的SQL的应用,在短时间内要使得所有MySQL存储过程和函数正常运行,那么如果能找到一个比较好的调试工具,就可以事半功倍, 这里介绍的是dbForge Studio for MySQL。
1. 首先说明dbForge Studio for MySQL具有存储过程调试功能的版本是收费的,但有30天调用期,我想足以满足你的要求。
2安装部分省略,直接官网下载安装,没有依赖包,直接简单
3,调试存储过程,建议调试在测试环境下进行。
3.1 为存储过程,生成调试信息:右击要调试的过程--"Debug"--"Compile for Debugging', 操作如下
 
3.2 为存储过程设置断点:打开存储过程的代码, 在你要设置断点的行上双击便可
 
3.3 调试存储过程,单步执行,并查看每个变量的值。
右击存储过程---"Debug"--"Step Into", 如下图
 
先择"Stop Into"后,如果你的存储过程有参数,则为弹出窗体提示输入参数值,如果没有,则不直接运行;
存储过程会从"begin"开始执行,然后点又上角的"step over"(F10), 单步执行。
 
查看变量值:选中变量,点右键,选择"Add Wath", 这个变量就会在"Watches"这个视图区出现,如果你单步运行到这个变量值,则可以看见了,这样就可以调试,变量值是否正确,有错误没,循环次数等。

调试和Eclipse差不多,粗略作个说明,方便自己以后查找,没用过的同学按步骤折腾一下就知道如何用了。
========

mysql存储过程调试学习总结相关推荐

  1. mysql存储过程调试_MYSQL存储过程调试过程

    mysql不像oracle有plsqldevelper工具用来调试存储过程,所以有几种简单的方式追踪执行过程: 1.用一张临时表,记录调试过程: 2.直接在存储过程中,增加select xxx,在控制 ...

  2. mycat mysql 存储过程_MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程...

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  3. mysql中语句块当事务,Mysql 存储过程的学习笔记

    技术要点 一个存储过程包括名字.参数列表,以及可以包括很多SQL语句的SQL语句集.下面为一个存储过程的定义过程: create procedure proc_name (in parameter i ...

  4. mysql -存储过程的学习

    2019独角兽企业重金招聘Python工程师标准>>> 1.首先交代数据库现有情况: mysql> show tables; +-----------------------+ ...

  5. mysql存储过程调试方法

    有如下一个存储过程 CREATE PROCEDURE `p_next_id`(kind_name VARCHAR(30), i_length int,currentSeqNo VARCHAR(3),O ...

  6. mysql存储过程-汇总学习

    简单的存储过程插入语句 BEGININSERT into useraccount VALUES (10,10,3,'2013-01-02',9);#RoauDtine body goes here.. ...

  7. python执行mysql存储过程_Mysql学习---使用Python执行存储过程

    使用Python执行存储过程 使用Python执行存储过程[2部分]: 1.执行存储过程,获取存储过程的结果集 2.将返回值设置给了  @_存储过程名_序号 =#!/usr/bin/env pytho ...

  8. MySql存储过程调试

    如何加log? 如何判断当前卡在那个小分片sql语句上了? 发现卡壳,如何杀掉语句 1.如何加log? 答:第一种在控制台,用于显示,比如sql1 和sql2之前想加打印日志.可以用SELECT &q ...

  9. mysql存储过程call_mysql call 存储过程

    PHP调用MYSQL存储过程实例 PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例 ...

最新文章

  1. python装饰器作用-Python装饰器用法实例总结
  2. 浅谈ThreadPool 线程池(引用)
  3. 8. An Introduction to MCMC for Machine Learning (2)
  4. armv8/armv9的简介-学习这一篇就够了
  5. 消费级GPU、速度提升3000倍,微软FastNeRF实现200FPS高保真神经渲染
  6. mysql使用常量列_MySQL 执行计划
  7. Bash:字符串操作
  8. 企业级SpringBoot教程(十一)springboot集成swagger2,构建Restful API
  9. 跨域验证cookie与缓存控制
  10. ActionScript读取XML的路径问题
  11. windows 文件后缀名
  12. ker矩阵是什么意思_2.Matlab编程基础:矩阵操作
  13. HP34401a实现高精度温度测量
  14. css 网页自适应 @media screen详解
  15. HTML3个炫酷代码
  16. 计算机常用屏幕分辨率,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...
  17. eureka集群高可用配置
  18. 关于iPhone出现白苹果黑屏现象的修复方法
  19. leetcode 5473. 灯泡开关 IV (阿里云周赛)
  20. Python程序员经常会遇到文件权限问题,例如在打开或写入文件时出现“PermissionError: [Errno 13] Permission denied...

热门文章

  1. 工作中如何使用线程池的?自己如何定义一个线程池?
  2. Backbone与服务器接口之Model数据同步
  3. 默认访问首页 || 国际化||设置全局字符编码的默认设置
  4. spring中的依赖注入——构造函数注入、set方法注入( 更常用的方式)、复杂类型的注入/集合类型的注入
  5. 高数第六章知识点框架
  6. jQuery中wrap、wrapAll和wrapInner用法以及区别
  7. 损失函数-经验风险最小化-结构风险最小化
  8. mysql conflicts with_安装MYSQL错误“conflicts with file from package mysql-libs-*” 解决方法...
  9. gcc: error: CreateProcess: No such file or directory解决方案
  10. 第三章:3.6 典型信号傅里叶变换