日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql存储过程调试学习总结

發(fā)布時(shí)間:2025/4/14 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。