Warum wechselt Sqlyog den Grenzwert, wenn es mySQL -gespeicherte Prozedur erstellt?
-
27-10-2019 - |
Frage
Wenn ich mit SQLYOG eine gespeicherte Prozedur mache, gibt es mir diese Vorlage:
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `apachelogs`.`test`()
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/
BEGIN
END$$
DELIMITER ;
Ich frage mich, warum es den Grenzwert ändert, bevor er ein gespeichertes Verfahren erstellt. Und warum ich noch benutzen kann ;
Abgrenzer im Inneren create
Aussage (ich denke, es kann wegen des Umfangs).
Lösung
Das ändert die Anweisung Grenzwerter an $$
Halten Sie MySQL davon ab, Semikolonen innerhalb des gespeicherten Verfahrens als Trennzeichen zu interpretieren. Ohne das DELIMITER $$
, Sie könnten nicht in der Lage sein, ein gespeichertes Verfahren zu definieren, das enthalten ist ;
Aussagen darin enthalten. Sie können es als einen Weg betrachten, um dem Semikolon für die Dauer der Definition des Verfahrens global zu entkommen.
Von dem Feines Handbuch:
Um das neu zu definieren Mysql Abgrenzer verwenden Sie die
delimiter
Befehl. Das folgende Beispiel zeigt, wie das für die gehtdorepeat()
Verfahren gerade gezeigt. Der Trennzeichen wird in geändert//
Damit die gesamte Definition als einzelne Anweisung an den Server übergeben und anschließend wiederhergestellt werden kann;
Vor dem Aufrufen des Prozedur. Dies ermöglicht das;
Der im Verfahrensgremium verwendete Abgrenzer, das an den Server übergeben wird, anstatt von zu interpretieren Mysql selbst.
Ich weiß nicht, ob meine Erklärung klarer ist als die des Handbuchs, aber vielleicht wird eine von ihnen (oder beide zusammen) zu einem Verständnis führen.