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

War es hilfreich?

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 geht dorepeat() 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top