Mysql系列(十一)異常處理

?mysql系列(十一)異常處理

DROP?PROCEDURE?IF?EXISTS?`SP_MODEL`;  DELIMITER?;;  CREATE?PROCEDURE?`SP_MODEL`(IN?V_TYPE?INT)  BEGIN  /**********存儲(chǔ)過(guò)程模版,結(jié)合了·返回自定義錯(cuò)誤信息·錯(cuò)誤退出··事物回滾·的功能***********/  DECLARE?V_TEST?INT?DEFAULT?0;  DECLARE?V_ERR_NO?INT?DEFAULT?0;  DECLARE?V_ERR_MSG?VARCHAR(100)?DEFAULT?'執(zhí)行成功';  DECLARE?continue?HANDLER?FOR?SQLEXCEPTION,SQLWARNING,NOT?FOUND?SET?V_ERR_NO=1;  --?CREATE?TABLE?`test_error`?(  --?`a`?int(11)?NOT?NULL,  --?`b`?int(11)?DEFAULT?NULL,  --?PRIMARY?KEY?(`a`)  --?)?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;  --?TRUNCATE?TABLE?TEST_ERROR;  --?CALL?SP_MODEL(1);  --?SELECT?*?FROM?TEST_ERROR;  START?TRANSACTION;  Label:--?執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤則跳出此Label  BEGIN  IF?V_TYPE=1?THEN  INSERT?INTO?TEST_ERROR(a,b)?VALUES(1,1);  INSERT?INTO?TEST_ERROR(a,b)?VALUES(1,1);  IF?V_ERR_NO=1?THEN  SET?V_ERR_MSG='您已經(jīng)插過(guò)啦,別再重復(fù)插~';  --?LEAVE?Label;  END?IF;  SET?V_TEST=1;  INSERT?INTO?TEST_ERROR(a,b)?VALUES(3,'a');  IF?V_ERR_NO=1?THEN  SET?V_ERR_MSG='尺寸不對(duì),插不進(jìn)來(lái)~';  LEAVE?Label;  END?IF;  INSERT?INTO?TEST_ERROR(a,b)?VALUES(4,1);  SET?V_TEST=2;  ELSE  SET?V_ERR_MSG='傳入?yún)?shù)V_TYPE不正確';  SET?V_ERR_NO=1;?--?直接設(shè)置此變量值為1,主動(dòng)拋出異常  LEAVE?Label;  END?IF;  END?Label;  IF?V_ERR_NO=1?THEN  ROLLBACK;  ELSE  COMMIT;  END?IF;  SELECT?V_ERR_NO?AS?ERR_NO,V_ERR_MSG?AS?ERR_MSG,?V_TEST?AS?TEST;?--?返回執(zhí)行結(jié)果  END  ;;  DELIMITER?;

以上就是?mysql系列(十一)異常處理的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享