14. 错误处理
-- 狀態(tài)
-- 0 插入成功
-- -1 選課失敗,已選擇
-- -2 選課失敗,課程已達(dá)到人數(shù)上限
-- -3 選課失敗,課程未審核-- 插入時(shí)要判斷的條件:
-- 未選擇過(guò)該課程,否則返回 -1
-- 課程是審核過(guò)的,否則返回 -3
-- 課程人數(shù)未滿, 否則返回 -2UPDATE course SET available = 0 WHERE course_no = 2; -- 先把2課程可用人數(shù)設(shè)置為0SET @state = 0;
CALL choose_proc('2013003',2,@state); -- -2 人數(shù)已滿
SELECT @state,@state2;
SET @state = 0;
CALL choose_proc('2013003',3,@state); -- -1 已選擇過(guò)
SELECT @state;
SET @state = 0;
CALL choose_proc('2013003',4,@state); -- -3 未審核
SELECT @state;SELECT * FROM choose WHERE student_no = '2013003';-- 自定義錯(cuò)誤處理
-- 錯(cuò)誤碼: 1452
格式:
DECLARE 錯(cuò)誤處理類型 HANDLER FOR 錯(cuò)誤觸發(fā)條件
自定義錯(cuò)誤處理程序錯(cuò)誤處理類型: 1 CONTINUE 2 EXIT
錯(cuò)誤觸發(fā)條件:錯(cuò)誤碼DROP PROCEDURE choose_proc;
DELIMITER $$
CREATE PROCEDURE choose_proc(IN stu_no VARCHAR(20),IN c_no VARCHAR(20),OUT state INT)
MODIFIES SQL DATA
BEGINDECLARE s1 INT;
DECLARE s2 VARCHAR(6);
DECLARE s3 INT;DECLARE CONTINUE HANDLER FOR 1452
BEGIN
SET @errorInfo = '外鍵約束錯(cuò)誤';
END;-- 1. 查詢有沒(méi)有選擇過(guò)
SELECT COUNT(*) INTO s1 FROM choose WHERE student_no = stu_no AND course_no = c_no;
IF(s1 >= 1) THEN
SET state = -1;
ELSE
-- 2. 查詢課程是不是已審核的
SELECT STATUS INTO s2 FROM course WHERE course_no = c_no;
IF (s2 = '已審核') THEN
-- 3. 查詢課程是不是人數(shù)未滿的
SELECT available INTO s3 FROM course WHERE course_no = c_no;IF(s3 >0 ) THEN
SET state = 0;-- 插入
INSERT INTO choose VALUES(NULL,stu_no,c_no,NULL,NOW()); -- 這里出的錯(cuò)
-- 如果沒(méi)有自定義錯(cuò)誤處理 下面代碼不運(yùn)行了
SET @state2 = '這里有沒(méi)有運(yùn)行?';ELSE
SET state = -2;
END IF;
ELSE
SET state = -3;
END IF;
END IF;
END
$$
DELIMITER ;-- 用以下語(yǔ)句測(cè)試
SET @state = 0;
SET @state2 = '';
SET @errorInfo = '';
CALL choose_proc('2014010',1,@state);
SELECT @state,@state2,@errorInfo;-- 在存儲(chǔ)過(guò)程中,如果sql語(yǔ)句運(yùn)行出錯(cuò),比如:外鍵約束這種錯(cuò)誤報(bào)錯(cuò)
-- 后面的語(yǔ)句就不會(huì)運(yùn)行了
轉(zhuǎn)載于:https://www.cnblogs.com/bchen/p/7426315.html
總結(jié)
- 上一篇: 【原创】Struts2.5.12版本中使
- 下一篇: 几种典型的软件自动化测试框架