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č.