mysql存储过程调试学习总结
生活随笔
收集整理的這篇文章主要介紹了
mysql存储过程调试学习总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Mysql調試存儲過程最簡單的方法
以前同事告訴我用臨時表插入變量數據來查看,但是這種方法過于麻煩,而且Mysql沒有比較好的調試存儲過程的工具。今天google了下發(fā)現(xiàn)可以用select + 變量名的方法來調試。。。真是讓我汗顏啊。?
具體方法:?
在你的存儲過程中加入如下語句:?
SELECT 變量1,變量2;?
然后用mysql自帶的cmd程序進入mysql> 下。?
call 你的存儲過程名(輸入參數1,@輸出參數);(注:這里幫助下新同學,如果你的存儲過程有輸出變量,那么在這里只需要加 @ 然后跟任意變量名即可);?
即可發(fā)現(xiàn)你的變量值被打印到了cmd下,簡單吧?
========
創(chuàng)建mysql中的“存儲過程”及創(chuàng)建后調試該“存儲過程”的方法
1.創(chuàng)建一個名為“p_buyByCash1”的存儲過程,創(chuàng)建如下: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.創(chuàng)建之后怎樣驗證創(chuàng)建的存儲過程是否正確,下面提供一種調試方法:
通過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
然后進入命令行:
執(zhí)行 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');即可
下面是我執(zhí)行的結果:
創(chuàng)建mysql中的“存儲過程”及創(chuàng)建后調試該“存儲過程”的方法
3.下面再給出一個可以自己測試的小例子:
小測試:
CREATE ?PROCEDURE `test`()
begin
? declare a varchar(10);
? set a = "test";
? select a;
? select a;
end;
然后進入命令行:
執(zhí)行 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,調試存儲過程,建議調試在測試環(huán)境下進行。
3.1 為存儲過程,生成調試信息:右擊要調試的過程--"Debug"--"Compile for Debugging', 操作如下
?
3.2 為存儲過程設置斷點:打開存儲過程的代碼, 在你要設置斷點的行上雙擊便可
?
3.3 調試存儲過程,單步執(zhí)行,并查看每個變量的值。
右擊存儲過程---"Debug"--"Step Into", 如下圖
?
先擇"Stop Into"后,如果你的存儲過程有參數,則為彈出窗體提示輸入參數值,如果沒有,則不直接運行;
存儲過程會從"begin"開始執(zhí)行,然后點又上角的"step over"(F10), 單步執(zhí)行。
?
查看變量值:選中變量,點右鍵,選擇"Add Wath", 這個變量就會在"Watches"這個視圖區(qū)出現(xiàn),如果你單步運行到這個變量值,則可以看見了,這樣就可以調試,變量值是否正確,有錯誤沒,循環(huán)次數等。
調試和Eclipse差不多,粗略作個說明,方便自己以后查找,沒用過的同學按步驟折騰一下就知道如何用了。
========
總結
以上是生活随笔為你收集整理的mysql存储过程调试学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解计算机图形学三维变换算法
- 下一篇: mysql集群安装