Passei um dia tentando descobrir isso, espero que isso ajude alguém por aí ...
DELIMITER
é um recurso do cliente, não do servidor MySQL. O RDS Query Editor é um cliente, mas não suporta a alteração do delimitador, portanto, tentar executar o script que você forneceu não funcionará desde a primeira vez que vir um ponto e vírgula, ele interpretará isso como o final do comando e falhará com um erro de sintaxe. Então, como você cria algo como um procedimento armazenado que possui várias instruções e ponto e vírgula? Você deve criá-lo como um
.sql
e envie-o usando a API de dados de uma função do Lambda ou da CLI. Primeiro, crie seu script em um
.sql
arquivo sem nenhum DELIMITER
comandos ou delimitadores alternativos. Por exemplo:
function.sql
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END
Em seguida, execute o script usando a CLI assim:
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
Como alternativa, você pode criar uma função Lambda que leia o arquivo e use
rds_client.execute_statement()
para enviar o script ao servidor por meio da API de dados. Mas, novamente, NÃO use o DELIMITER
declaração. O servidor vê o BEGIN
e END
linhas e age de acordo sem a necessidade de alterar o delimitador.