sql >> Base de Datos >  >> RDS >> Mysql

Error de sintaxis al usar delimitadores con Aurora Serverless MySQL 5.6

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.