Pasé un día tratando de resolver esto, así que espero que esto ayude a alguien...
DELIMITER
es una característica del cliente, no del servidor MySQL. El editor de consultas RDS es un cliente, pero no admite cambiar el delimitador, por lo que intentar ejecutar el script que ha proporcionado no funcionará, ya que la primera vez que vea un punto y coma lo interpretará como el final del comando y fallará con un error de sintaxis.
Entonces, ¿cómo se crea algo como un procedimiento almacenado que tiene múltiples declaraciones y puntos y comas? Debes crearlo como un .sql
y envíelo mediante la API de datos desde una función Lambda o la CLI.
Primero, crea tu script en un .sql
archivo sin ningún DELIMITER
comandos o delimitadores alternativos.
Por ejemplo:function.sql
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END
Luego, ejecute el script usando la CLI de esta manera:
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
Alternativamente, puede crear una función Lambda que lea el archivo y use rds_client.execute_statement()
para enviar el script al servidor a través de la API de datos. Pero nuevamente, NO use el DELIMITER
declaración. El servidor ve el BEGIN
y END
líneas y actúa en consecuencia sin necesidad de cambiar el delimitador.