一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySql存儲過程異常處理示例代碼分享

MySql存儲過程異常處理示例代碼分享

2019-12-03 15:19MYSQL教程網 Mysql

在網上查了好多資料,發現關于mysql的異常處理資料都是一些錯誤號列表,對于平時運行中,我們可能更多的希望能夠記錄準確的錯誤消息到日志中

下面是示例代碼,在發生異常的時候會將異常信息存入日志表中,并繼續運行后面的語句. 

如果您有更好的建議,望不吝賜教. 

存儲過程異常處理示例 

復制代碼代碼如下:


-- -------------------------------------------------------------------------------- 
-- Routine DDL 
-- Note: comments before and after the routine body will not be stored by the server 
-- -------------------------------------------------------------------------------- 
DELIMITER $$ 
CREATE DEFINER=`driveradmin`@`%` PROCEDURE `Merge_BrandProductKey`() 
BEGIN 
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
begin 
insert into t_runninglog values(default,default,'exception in MergeBrandProductKey',concat(@@error_count,' errors')); 
commit; 
end; 
DECLARE CONTINUE HANDLER FOR SQLWARNING 
begin 
insert into t_runninglog values(default,default,'warnings in MergeBrandProductKey',concat(@@warning_count,' warnings')); 
commit; 
end; 
insert into t_runninglog values(default,default,'start in MergeBrandProductKey',''); 
commit; 
-- 任務執行主體 開始 
-- /* 
-- normal 
update brandproductkey as bpk, 
(select bp.brandproductid, bp.brandproductenname, bp.brandid 
from brandproduct as bp 
inner join (select brandid,brandproductid from brandproductdriverrelation group by brandid,brandproductid) as bpr 
on bp.brandid=bpr.brandid and bp.brandproductid = bpr.brandproductid 
) as bpp 
set bpk.brandproductid=bpp.brandproductid 
where bpk.brandproductid = 0 
-- and bpk.computertype = 2 -- 0 
and bpk.brandid = bpp.brandid 
and upper(bpk.brandproductkeyname) = upper(replace(bpp.brandproductenname,' ','')); 
commit; 
insert into t_runninglog values(default,default,'rule normal in MergeBrandProductKey',''); 
commit; 
-- sony rule 1 
-- VPCEA37EC --> (VPCEA37EC/B,VPCEA37EC/L,VPCEA37EC/P,VPCEA37EC/W) 
update brandproductkey as bpk, 
(select bp.brandproductid, bp.brandproductenname, bp.brandid 
from brandproduct as bp 
inner join (select brandid,brandproductid from brandproductdriverrelation group by brandid,brandproductid) as bpr 
on bp.brandid=bpr.brandid and bp.brandproductid = bpr.brandproductid and bp.brandid=60 
) as bpp 
set bpk.brandproductid=bpp.brandproductid 
where bpk.brandproductid = 0 
-- and bpk.computertype = 2 -- 0 
and bpk.brandid = bpp.brandid 
and bpp.brandproductenname like concat(bpk.brandproductkeyname,'/%'); 
commit; 
insert into t_runninglog values(default,default,'rule sony 1 in MergeBrandProductKey',''); 
commit; 
-- sony rule 2 
-- VGN-TZ37N_X --> VGN-TZ37N/X 
update brandproductkey as bpk, 
(select bp.brandproductid, bp.brandproductenname, bp.brandid 
from brandproduct as bp 
inner join (select brandid,brandproductid from brandproductdriverrelation group by brandid,brandproductid) as bpr 
on bp.brandid=bpr.brandid and bp.brandproductid = bpr.brandproductid and bp.brandid=60 
) as bpp 
set bpk.brandproductid=bpp.brandproductid 
where bpk.brandproductid = 0 
-- and bpk.computertype = 2 -- 0 
and bpk.brandid = bpp.brandid 
and upper(bpk.brandproductkeyname) = upper(replace(bpp.brandproductenname,'/','_')); 
commit; 
insert into t_runninglog values(default,default,'rule sony 2 in MergeBrandProductKey',''); 
commit; 
-- lenovo rule 1 
-- ZHAOYANG E45 --> 昭陽E45 
update brandproductkey as bpk, 
(select bp.brandproductid, bp.brandproductenname, bp.brandid,bpr.driverid 
from brandproduct as bp 
inner join (select brandid,brandproductid,max(driverinfoid) as driverid from brandproductdriverrelation group by brandid,brandproductid) as bpr 
on bp.brandid=bpr.brandid and bp.brandproductid = bpr.brandproductid and bp.brandid=37 
) as bpp 
set bpk.brandproductid=bpp.brandproductid 
where bpk.brandproductid = 0 
-- and bpk.computertype = 2 -- 0 
and bpk.brandid = bpp.brandid 
and bpk.brandproductkeyname <> '' 
and instr(bpp.brandproductenname,SUBSTRING_INDEX(bpk.brandproductkeyname,' ',-1))>0 
and bpp.brandproductenname regexp concat('^[^\x00-\xff]+', SUBSTRING_INDEX(bpk.brandproductkeyname,' ',-1),'$'); 
commit; 
insert into t_runninglog values(default,default,'rule lenovo 1 in MergeBrandProductKey',''); 
commit; 
-- HP rule 1 
-- HP Compaq 6535s --> HP Compaq 6535s 筆記本電腦 
update brandproductkey as bpk, 
(select bp.brandproductid, bp.brandproductenname, bp.brandid 
from brandproduct as bp 
inner join (select brandid,brandproductid from brandproductdriverrelation group by brandid,brandproductid) as bpr 
on bp.brandid=bpr.brandid and bp.brandproductid = bpr.brandproductid and bp.brandid=36 
) as bpp 
set bpk.brandproductid = bpp.brandproductid 
where bpk.brandproductid = 0 
-- and bpk.computertype = 2 -- 0 
and bpk.brandid = bpp.brandid 
and bpk.brandproductkeyname <> '' 
and bpp.brandproductenname = concat(bpk.brandproductkeyname,' 筆記本電腦'); 
insert into t_runninglog values(default,default,'rule hp 1 in MergeBrandProductKey',''); 
commit; 
-- HP rule 2 
-- HP Compaq 6535s --> HP Compaq 6535s Notebook PC 
update brandproductkey as bpk, 
(select bp.brandproductid, bp.brandproductenname, bp.brandid 
from brandproduct as bp 
inner join (select brandid,brandproductid from brandproductdriverrelation group by brandid,brandproductid) as bpr 
on bp.brandid=bpr.brandid and bp.brandproductid = bpr.brandproductid and bp.brandid=36 
) as bpp 
set bpk.brandproductid = bpp.brandproductid 
where bpk.brandproductid = 0 
-- and bpk.computertype = 2 -- 0 
and bpk.brandid = bpp.brandid 
and bpk.brandproductkeyname <> '' 
and upper(bpp.brandproductenname) = upper(concat(bpk.brandproductkeyname,' Notebook PC')); 
insert into t_runninglog values(default,default,'rule hp 2 in MergeBrandProductKey',''); 
commit; 
-- */ 
-- 任務執行主體 結束 
insert into t_runninglog values(default,default,'finish in MergeBrandProductKey',''); 
commit; 
END 


有關HANDLER的語法結構如下: 

復制代碼代碼如下:


DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement 
handler_type: CONTINUE | EXIT 
condition_value: SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code 
Handlers類型: 
, EXIT: 發生錯誤時退出當前代碼塊(可能是子代碼塊或者main代碼塊) 
, CONTINUE: 發送錯誤時繼續執行后續代碼 
condition_value: 
condition_value支持標準的SQLSTATE定義; 
SQLWARNING是對所有以01開頭的SQLSTATE代碼的速記 
NOT FOUND是對所有以02開頭的SQLSTATE代碼的速記 
SQLEXCEPTION是對所有沒有被SQLWARNING或NOT FOUND捕獲的SQLSTATE代碼的速記 
除了SQLSTATE值,MySQL錯誤代碼也被支持 
但是對于mysql而言,優先級如下: 
MySQL Error code > SQLSTATE code > 命名條件 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 999热这里全都是精品 | 久久视频精品3线视频在线观看 | 91青青视频 | 双性人bbww欧美双性 | 高清一级做a爱免费视 | 国产欧美亚洲精品第一页青草 | www.亚洲5555.com| tube性睡觉hd | 国内自拍成人网在线视频 | 天天操天天射天天爽 | 亚洲精品www久久久久久久软件 | 女海盗斯蒂内塔的复仇2免费观看 | 青青色综合| 毛片亚洲毛片亚洲毛片 | 成在线人免费视频一区二区三区 | 国产美女亚洲精品久久久久久 | 激情艳妇 | 国产高清经典露脸3p | 色综久久天天综合绕视看 | 欧美撒尿屁股嘘嘘撒尿 | 护士让我吃奶我扒她奶 | 免费91麻豆精品国产自产在线观看 | 国产一区二区三区日韩 | 欧美同志video 在线观看 | daring国家队在线观看樱花动漫 | 国产综合视频 | 国产精品青青青高清在线密亚 | 免费国产白棉袜踩踏区域 | 1024亚洲天堂 | 国产成人a∨麻豆精品 | 久久国产主播福利在线 | 亚洲高清国产拍精品影院 | 韩国三级在线播放 | 日本又黄又裸一级大黄裸片 | 日本中文字幕在线观看视频 | 东北美女野外bbwbbw免费 | 国产经典一区二区三区蜜芽 | 人人干国产 | 国产福利兔女郎在线观看 | 亚洲第一网色综合久久 | 久久婷婷五月综合色丁香花 |