Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gespeicherte Prozeduren mit MySQL Workbench

Bei Verwendung des integrierten Prozedureditors fügt MySQL Workbench einige zusätzliche Befehle hinzu:

USE `test`; // <----------
DROP procedure IF EXISTS `p2`;  // <----------

DELIMITER $$
USE `test`$$ // <----------
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$

DELIMITER ; // <----------

Diese Befehle beziehen sich nicht unbedingt auf die Syntax der gespeicherten Prozeduren, sie sind lediglich ein Gebrauchsgegenstand – andere MySQL-Clients (wie HeidiSQL oder das offizielle Befehlszeilendienstprogramm) werden sie nicht hinzufügen. Die letzte Änderung des Trennzeichens ist wahrscheinlich ein Zurücksetzen, um Probleme in zukünftigen Anweisungen auf derselben Verbindung zu vermeiden.

Sie müssen das Trennzeichen ändern, um dem Client mitzuteilen, wo der Prozedurcode beginnt und endet. Das Problem besteht darin, dass der Prozedurkörper normalerweise eine Sammlung von SQL-Anweisungen ist, sodass das Weglassen der Änderung des Trennzeichens MySQL denken lassen würde, dass Sie versuchen, eine Reihe von Anweisungen auszuführen, von denen die erste die folgende wäre:

CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';

Mit DELIMITER $$ Sie teilen MySQL mit, dass Ihre vollständige Anweisung von CREATE stammt bis END . Es ist nur syntaktischer Zucker:DELIMITER ist nicht einmal ein SQL-Schlüsselwort. HeidiSQL stellt zum Beispiel eine GUI mit einem Textfeld bereit, in das Sie den Hauptteil der Prozedur schreiben, daher brauchen Sie den DELIMITER-Workaround nicht.