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
Gespeicherte Prozedur aufrufen
/* 调用存储过程*/ CALL handlerdemo(); /* 查看调用存储过程结果*/ SELECT @X,@info;
Erfahrung:
1. Anweisungsterminator
Möglicherweise behandelt MySQL gespeicherte Prozeduren und benutzerdefinierte Funktionen als eine Anweisung, sodass mehrere Anweisungen in der gespeicherten Prozedur durch „;“ getrennt werden. Um Konflikte zu vermeiden, verwenden Sie zur Neudefinition ein Trennzeichen der Terminator.
Im Allgemeinen können Sie vor dem Start der gespeicherten Prozedur ein neues Abschlusszeichen definieren, z. B.
delimiter //
Nachdem die gespeicherte Prozedur geschrieben wurde, stellen Sie die Definition wieder her: delimiter;
2. Variablen
MySQL-Variablen sind die gleichen wie SQL SERVER, in der Form @X, es ist jedoch keine Deklaration erforderlich, sie können verwendet werden direkt.
In gespeicherten Prozeduren müssen Variablen nicht @ sein, sie müssen jedoch deklariert werden. Und die Anweisung sollte am Anfang der gespeicherten Prozedur (?) stehen, wie in diesem Beispiel, sonst wird ein Fehler gemeldet. Es ist wirklich seltsam. Einerseits können Variablen verwendet werden, ohne sie zu deklarieren. Andererseits muss die Deklarationsposition manchmal eingeschränkt werden, was verwirrend ist und etwas beiläufig wirkt.
Variablen innerhalb einer gespeicherten Prozedur, ihr Geltungsbereich ist auf die gespeicherte Prozedur beschränkt. Aber diese Variablen mit @ scheinen sich über Sitzungen und Verbindungen zu erstrecken und scheinen globale Variablen zu sein? Wie das Beispiel oben.
3. Bedingungen und Verarbeitung
Bedingungen für die Anrufverarbeitung definieren. Wie im obigen Beispiel:
DECLARE oh_no condition for sqlstate '23000'; #DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1; declare exit handler for oh_no set @info='违反主键约束';
Das Obige ist der obige Inhalt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www. php.cn)! Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!