Ho passato un giorno cercando di capirlo, quindi spero che questo aiuti qualcuno là fuori...
DELIMITER
è una caratteristica del client, non del server MySQL. L'editor di query RDS è un client ma non supporta la modifica del delimitatore, quindi il tentativo di eseguire lo script fornito non funzionerà poiché la prima volta che vede un punto e virgola lo interpreterà come la fine del comando e fallirà con un errore di sintassi.
Quindi, come si crea qualcosa come una stored procedure che contiene più istruzioni e punti e virgola? Devi crearlo come .sql
file e invialo utilizzando l'API dei dati da una funzione Lambda o dalla CLI.
Innanzitutto, crea il tuo script in un .sql
file senza alcun DELIMITER
comandi o delimitatori alternativi.
Ad esempio:function.sql
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END
Quindi, esegui lo script utilizzando la CLI in questo modo:
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
In alternativa, puoi creare una funzione Lambda che legga il file e utilizzi rds_client.execute_statement()
per inviare lo script al server tramite la Data API. Ma ancora una volta, NON utilizzare il DELIMITER
dichiarazione. Il server vede il BEGIN
e END
linee e agisce di conseguenza senza la necessità di modificare il delimitatore.