Z komentářů:
Tak to nefunguje.
Abyste pochopili proč, musíte pochopit, jak funguje mysql
CLI – a jakýkoli jiný program, který dokáže číst a spouštět soubor výpisu, jako je tento – to ve skutečnosti zvládá.
DELIMITER
není něco, čemu server rozumí.
DELIMITER
se používá ke sdělování analyzátoru na straně klienta jaký by měl být aktuální oddělovač příkazů, aby analyzátor na straně klienta mohl příkazy správně rozdělit a jeden po druhém doručit na server k provedení.
Z dokumentů. Pozorně si všimněte, že mysql
, pokaždé, když je zde použit, odkazuje na mysql
klientský nástroj -- ne server.
Takže ke zpracování takového souboru potřebujete analyzátor na straně klienta, který dělá to samé mysql
ano... a zde kód, který píšete, je (musí být) analyzátor příkazů na straně klienta. Takže vy jste ten, kdo potřebuje napsat logiku, aby zvládl oddělovač.
Abyste mohli dělat, co chcete, musíte interpretovat DELIMITER
příkazy, použijte je ke sledování aktuálního oddělovače příkazů, ale neposílejte je na server.
Poté musíte číst vstup jeden řádek po druhém, ukládat do vyrovnávací paměti to, co jste přečetli, dokud nenajdete zadaný oddělovač na konci řádku a odeslat výsledný příkaz na server -- s výjimkou skutečný oddělovač výpisu z toho, co posíláte... takže byste například neposílali koncovku $$
za tělem procedury (pokud aktuální oddělovač příkazu není ;
, který můžete odeslat nebo neposílat -- serveru je to jedno.) Potom vyprázdněte vyrovnávací paměť a začněte znovu číst, dokud neuvidíte další instanci oddělovače (a odešlete příkaz na server) nebo neodpovídá