Fra kommentarer:
Sådan fungerer det ikke.
For at forstå hvorfor, skal du forstå, hvordan mysql
CLI -- og ethvert andet program, der kan læse og udføre en dumpfil som denne -- håndterer det faktisk.
DELIMITER
er ikke noget, serveren forstår.
DELIMITER
bruges til at fortælle klientsideparseren hvad den aktuelle sætningsafgrænser skal være, så klient-side-parseren korrekt kan opdele sætningerne og levere én ad gangen til serveren til udførelse.
Fra dok. Bemærk nøje, at mysql
, hver gang det bruges her, henviser til mysql
klientværktøj -- ikke serveren.
Så for at håndtere en sådan fil, har du brug for en klient-side parser, der gør det samme mysql
gør... og her er koden du skriver er (skal være) sætningsparseren på klientsiden. Så det er dig, der skal skrive logikken for at håndtere afgrænsningen.
For at gøre, hvad du vil, skal du fortolke DELIMITER
sætninger, brug dem til at holde styr på den aktuelle sætningsadskiller, men send dem ikke til serveren.
Derefter skal du gennemlæse input en linje ad gangen, buffere det du har læst, indtil du finder den angivne afgrænsning i slutningen af linjen, og sende den resulterende sætning til serveren -- eksklusive den faktiske sætningsadskiller fra det, du sender... så du for eksempel ikke ville sende endelsen $$
efter procedureteksten (medmindre den aktuelle sætningsadskiller er ;
, som du enten kan sende eller ikke sende -- serveren er ligeglad.) Tøm derefter bufferen og begynd at læse igen, indtil du ser en anden forekomst af en afgrænser (og sender erklæringen til serveren) eller matcher en DELIMITER
sætning og indstil din kodes aktuelle afgrænsningsvariabel til at matche den, så du korrekt identificerer slutningen af den næste sætning.