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

Chyba syntaxe při použití oddělovačů s Aurora Serverless MySQL 5.6

Strávil jsem den snahou na to přijít, takže doufám, že to někomu pomůže...

DELIMITER je funkce klienta, nikoli serveru MySQL. Editor dotazů RDS je klient, ale nepodporuje změnu oddělovače, takže pokus o spuštění vámi poskytnutého skriptu nebude fungovat, protože když poprvé uvidí středník, bude to interpretovat jako konec příkazu a selže se chyba syntaxe.

Jak tedy vytvoříte něco jako uloženou proceduru, která obsahuje více příkazů a středníků? Musíte jej vytvořit jako .sql a odešlete jej pomocí Data API buď z funkce Lambda, nebo z CLI.

Nejprve vytvořte skript v .sql soubor bez DELIMITER příkazy nebo alternativní oddělovače.

Například:function.sql

CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
   SELECT COUNT(*) INTO param1 FROM t;
END

Potom spusťte skript pomocí CLI takto:

cat function.sql | xargs -0 aws rds-data execute-statement \
    --resource-arn arn:aws:rds:eu-west-1:xxx:cluster:cluster-name \
    --secret-arn arn:aws:secretsmanager:eu-west-1:xxx:secret:secret-name-xxx \
    --database "database_name" \
    --sql

Případně můžete vytvořit funkci Lambda, která načte soubor a použije rds_client.execute_statement() k odeslání skriptu na server přes rozhraní Data API. Ale znovu, NEPOUŽÍVEJTE DELIMITER tvrzení. Server vidí BEGIN a END řádků a chová se podle toho bez nutnosti měnit oddělovač.



  1. Nelze se přihlásit pomocí vytvořeného uživatele v mysql

  2. Chyba SQL LIKE dotazu - závažná chyba v připraveném příkazu

  3. Typy kurzoru serveru SQL Server – pouze vpřed dynamický kurzor | Kurz SQL Server / Kurz TSQL

  4. Jak mapovat typ Enum v mybatis pomocí typeHandler na insert