sql >> Databáze >  >> RDS >> Mysql

Jak vytvořit uloženou proceduru obsahující DELIMITER v PHP s PDO?

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á DELIMITER a nastavte aktuální oddělovací proměnnou vašeho kódu tak, aby se s ní shodovala, abyste správně identifikovali konec dalšího příkazu.



  1. Dokáže zátěžové testování sady Visual Studio 2012 zachytit čítače výkonu linuxového serveru a databáze Oracle?

  2. pyodbc - velmi pomalá rychlost hromadného vkládání

  3. Uložená procedura MySQL:Parametr OUT není nastaven

  4. Jak vyhledat celé jméno, když jsou jméno a příjmení uloženy v různých sloupcích