sql >> Databasteknik >  >> RDS >> Mysql

Syntaxfel vid användning av avgränsare med Aurora Serverless MySQL 5.6

Jag tillbringade en dag med att försöka komma på det här så förhoppningsvis hjälper det någon där ute...

DELIMITER är en funktion hos klienten, inte MySQL-servern. RDS Query Editor är en klient men den stöder inte att ändra avgränsaren så att försöka köra skriptet du har tillhandahållit kommer inte att fungera eftersom första gången den ser ett semikolon kommer det att tolka det som slutet på kommandot och misslyckas med ett syntaxfel.

Så, hur skapar du något som en lagrad procedur som har flera uttalanden och semikolon i sig? Du måste skapa den som en .sql fil och skicka den med Data API från antingen en Lambda-funktion eller CLI.

Skapa först ditt skript i en .sql fil utan någon DELIMITER kommandon eller alternativa avgränsare.

Till exempel:function.sql

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

Kör sedan skriptet med CLI så här:

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

Alternativt kan du skapa en Lambda-funktion som läser filen och använder rds_client.execute_statement() för att skicka skriptet till servern via Data API. Men återigen, använd INTE DELIMITER påstående. Servern ser BEGIN och END linjer och agerar därefter utan att behöva ändra avgränsaren.



  1. Hur man släpper identitetsegenskapen för en kolumn i SQL Server-tabellen - SQL Server / T-SQL självstudie 44

  2. Doctrine 2 DQL CASE WHEN in Count

  3. 3 sätt att returnera en lista över SQL Server Agent-jobb (T-SQL)

  4. Hur får jag information om en index- och tabellägare i Oracle?