use test; drop table if exists t8; CREATE TABLE t8(s1 INT,PRIMARY KEY(s1)); drop procedure if exists handlerdemo; DELIMITER $$ CREATE PROCEDURE handlerdemo() BEGIN declare xx int default 4; DECLARE oh_no condition for sqlstate '23000'; #DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1; declare exit handler for oh_no set @info='违反主键约束'; SET @X=1; INSERT INTO t8 VALUES(1); SET @X=2; INSERT INTO t8 VALUES(1); SET @X=3; END
呼叫預存程序
/* 调用存储过程*/ CALL handlerdemo(); /* 查看调用存储过程结果*/ SELECT @X,@info;
心得體會:
1、語句結束符號裡多條語句用「;」隔開,為了避免衝突,就要用delimiter 重新定義結束符號。
一般可以在預存程序開始前,定義新的結束符,如
delimiter //
預存程序書寫完畢以後,再恢復定義:delimiter ;
的變數,跟SQL SERVER一樣,形狀如@X ,但無需聲明,直接使用。
3、條件和處理
定義條件,是為了給處理呼叫。如同上面的例子:
DECLARE oh_no condition for sqlstate '23000'; #DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1; declare exit handler for oh_no set @info='违反主键约束';