mysql存储过程调试学习总结
生活随笔
收集整理的這篇文章主要介紹了
mysql存储过程调试学习总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Mysql調(diào)試存儲(chǔ)過(guò)程最簡(jiǎn)單的方法
以前同事告訴我用臨時(shí)表插入變量數(shù)據(jù)來(lái)查看,但是這種方法過(guò)于麻煩,而且Mysql沒(méi)有比較好的調(diào)試存儲(chǔ)過(guò)程的工具。今天google了下發(fā)現(xiàn)可以用select + 變量名的方法來(lái)調(diào)試。。。真是讓我汗顏啊。?
具體方法:?
在你的存儲(chǔ)過(guò)程中加入如下語(yǔ)句:?
SELECT 變量1,變量2;?
然后用mysql自帶的cmd程序進(jìn)入mysql> 下。?
call 你的存儲(chǔ)過(guò)程名(輸入?yún)?shù)1,@輸出參數(shù));(注:這里幫助下新同學(xué),如果你的存儲(chǔ)過(guò)程有輸出變量,那么在這里只需要加 @ 然后跟任意變量名即可);?
即可發(fā)現(xiàn)你的變量值被打印到了cmd下,簡(jiǎn)單吧?
========
創(chuàng)建mysql中的“存儲(chǔ)過(guò)程”及創(chuàng)建后調(diào)試該“存儲(chǔ)過(guò)程”的方法
1.創(chuàng)建一個(gè)名為“p_buyByCash1”的存儲(chǔ)過(guò)程,創(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)建之后怎樣驗(yàn)證創(chuàng)建的存儲(chǔ)過(guò)程是否正確,下面提供一種調(diào)試方法:
通過(guò)mysql的控制臺(tái):“MySQL Command Line Client”,進(jìn)行調(diào)試。
直接 select 變量; 就可用在控制臺(tái)輸出。
在p_buyByCash存儲(chǔ)過(guò)程中添加幾個(gè)select 變量,來(lái)查看變量的輸出是否正確,修改后如下:
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
然后進(jìn)入命令行:
執(zhí)行 call "這兒寫(xiě)數(shù)據(jù)庫(kù)的名字".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í)行的結(jié)果:
創(chuàng)建mysql中的“存儲(chǔ)過(guò)程”及創(chuàng)建后調(diào)試該“存儲(chǔ)過(guò)程”的方法
3.下面再給出一個(gè)可以自己測(cè)試的小例子:
小測(cè)試:
CREATE ?PROCEDURE `test`()
begin
? declare a varchar(10);
? set a = "test";
? select a;
? select a;
end;
然后進(jìn)入命令行:
執(zhí)行 call test();即可
========
MySQL存儲(chǔ)過(guò)程調(diào)試工具
http://blog.csdn.net/dyllove98/article/details/8873315工具官網(wǎng)地址:http://www.devart.com/dbforge/mysql/studio/
對(duì)于某些存儲(chǔ)過(guò)程很多且復(fù)雜的SQL的應(yīng)用,在短時(shí)間內(nèi)要使得所有MySQL存儲(chǔ)過(guò)程和函數(shù)正常運(yùn)行,那么如果能找到一個(gè)比較好的調(diào)試工具,就可以事半功倍, 這里介紹的是dbForge Studio for MySQL。
1. 首先說(shuō)明dbForge Studio for MySQL具有存儲(chǔ)過(guò)程調(diào)試功能的版本是收費(fèi)的,但有30天調(diào)用期,我想足以滿足你的要求。
2安裝部分省略,直接官網(wǎng)下載安裝,沒(méi)有依賴包,直接簡(jiǎn)單
3,調(diào)試存儲(chǔ)過(guò)程,建議調(diào)試在測(cè)試環(huán)境下進(jìn)行。
3.1 為存儲(chǔ)過(guò)程,生成調(diào)試信息:右擊要調(diào)試的過(guò)程--"Debug"--"Compile for Debugging', 操作如下
?
3.2 為存儲(chǔ)過(guò)程設(shè)置斷點(diǎn):打開(kāi)存儲(chǔ)過(guò)程的代碼, 在你要設(shè)置斷點(diǎn)的行上雙擊便可
?
3.3 調(diào)試存儲(chǔ)過(guò)程,單步執(zhí)行,并查看每個(gè)變量的值。
右擊存儲(chǔ)過(guò)程---"Debug"--"Step Into", 如下圖
?
先擇"Stop Into"后,如果你的存儲(chǔ)過(guò)程有參數(shù),則為彈出窗體提示輸入?yún)?shù)值,如果沒(méi)有,則不直接運(yùn)行;
存儲(chǔ)過(guò)程會(huì)從"begin"開(kāi)始執(zhí)行,然后點(diǎn)又上角的"step over"(F10), 單步執(zhí)行。
?
查看變量值:選中變量,點(diǎn)右鍵,選擇"Add Wath", 這個(gè)變量就會(huì)在"Watches"這個(gè)視圖區(qū)出現(xiàn),如果你單步運(yùn)行到這個(gè)變量值,則可以看見(jiàn)了,這樣就可以調(diào)試,變量值是否正確,有錯(cuò)誤沒(méi),循環(huán)次數(shù)等。
調(diào)試和Eclipse差不多,粗略作個(gè)說(shuō)明,方便自己以后查找,沒(méi)用過(guò)的同學(xué)按步驟折騰一下就知道如何用了。
========
總結(jié)
以上是生活随笔為你收集整理的mysql存储过程调试学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 图解计算机图形学三维变换算法
- 下一篇: mysql集群安装