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
Appel d'une procédure stockée
/* 调用存储过程*/ CALL handlerdemo(); /* 查看调用存储过程结果*/ SELECT @X,@info;
Expérience :
1. Terminateur d'instruction
Peut-être que MySQL traite les procédures stockées et les fonctions personnalisées comme une seule instruction, donc plusieurs instructions dans la procédure stockée sont séparées par ";". le terminateur.
Généralement, vous pouvez définir un nouveau terminateur avant le démarrage de la procédure stockée, tel que
delimiter //
Une fois la procédure stockée écrite, restaurez la définition : delimiter;
2. Variables
Les variables Mysql sont les mêmes que SQL SERVER, sous la forme de @X, mais aucune déclaration n'est requise, elles peuvent être utilisées. directement.
Dans les procédures stockées, les variables n'ont pas besoin d'être @, mais elles doivent être déclarées. Et l'instruction doit être placée en tête de la procédure stockée (?), comme dans cet exemple, sinon une erreur sera signalée. C'est vraiment étrange. D'une part, des variables peuvent parfois être utilisées sans les déclarer. D'autre part, la position de déclaration doit parfois être limitée, ce qui prête à confusion et semble un peu banal.
Variables à l'intérieur de la procédure stockée, leur portée est limitée à la procédure stockée. Mais ces variables avec @ semblent s'étendre sur les sessions et les connexions, et semblent être des variables globales ? Comme l'exemple ci-dessus.
3. Conditions et traitement
Définir les conditions pour appeler le traitement. Comme dans l'exemple ci-dessus :
DECLARE oh_no condition for sqlstate '23000'; #DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1; declare exit handler for oh_no set @info='违反主键约束';
Ce qui précède est le contenu ci-dessus. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www. php.cn) ! Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www.php.cn) !