Aus Kommentaren:
So funktioniert es nicht.
Um zu verstehen, warum, müssen Sie verstehen, wie die mysql
CLI – und jedes andere Programm, das eine Dump-Datei wie diese lesen und ausführen kann – handhabt sie tatsächlich.
DELIMITER
ist etwas, was der Server nicht versteht.
DELIMITER
wird verwendet, um dem clientseitigen Parser mitzuteilen was das aktuelle Anweisungstrennzeichen sein sollte, damit der clientseitige Parser die Anweisungen korrekt aufteilen und eine nach der anderen zur Ausführung an den Server liefern kann.
Aus den Dokumenten. Beachten Sie sorgfältig, dass mysql
bezieht sich jedes Mal, wenn es hier verwendet wird, auf mysql
Client-Dienstprogramm -- nicht der Server.
Um eine solche Datei zu verarbeiten, benötigen Sie also einen clientseitigen Parser, der dasselbe tut mysql
tut ... und hier ist der Code, den Sie schreiben, ist (muss sein) der clientseitige Anweisungsparser. Sie sind also derjenige, der die Logik zur Behandlung des Trennzeichens schreiben muss.
Um zu tun, was Sie wollen, müssen Sie das DELIMITER
interpretieren verwenden Sie sie, um das aktuelle Anweisungstrennzeichen zu verfolgen, aber senden Sie sie nicht an den Server.
Dann müssen Sie die Eingabe Zeile für Zeile durchlesen, das Gelesene puffern, bis Sie das angegebene Trennzeichen am Ende der Zeile finden, und die resultierende Anweisung an den Server senden -- exclusiv das eigentliche Anweisungstrennzeichen von dem, was Sie senden ... also würden Sie zum Beispiel nicht die Endung $$
senden nach dem Prozedurhauptteil (es sei denn, das aktuelle Anweisungstrennzeichen ist ;
, die Sie entweder senden oder nicht senden können -- dem Server ist es egal.) Leeren Sie dann den Puffer und beginnen Sie erneut mit dem Lesen, bis Sie eine weitere Instanz eines Trennzeichens sehen (und die Anweisung an den Server senden) oder einen DELIMITER
-Anweisung und stellen Sie die aktuelle Trennzeichenvariable Ihres Codes so ein, dass sie mit ihr übereinstimmt, sodass Sie das Ende der nächsten Anweisung korrekt identifizieren.