Heim > Datenbank > MySQL-Tutorial > Anmerkungen zur MySQL-Studie: Gespeicherte Prozeduren

Anmerkungen zur MySQL-Studie: Gespeicherte Prozeduren

黄舟
Freigeben: 2017-02-15 10:57:54
Original
1013 Leute haben es durchsucht

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
Nach dem Login kopieren


Gespeicherte Prozedur aufrufen


/* 调用存储过程*/
CALL handlerdemo();

/* 查看调用存储过程结果*/
SELECT @X,@info;
Nach dem Login kopieren


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='违反主键约束';
Nach dem Login kopieren


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)!



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage