Ik heb een dag besteed om dit uit te zoeken, dus hopelijk helpt dit iemand daar...
DELIMITER
is een functie van de client, niet de MySQL-server. De RDS-queryeditor is een client, maar ondersteunt het wijzigen van het scheidingsteken niet, dus een poging om het script dat u hebt opgegeven uit te voeren, zal niet werken, aangezien de eerste keer dat het een puntkomma ziet, dit wordt geïnterpreteerd als het einde van de opdracht en mislukt met een syntaxisfout.
Dus, hoe creëer je zoiets als een opgeslagen procedure die meerdere instructies en puntkomma's bevat? Je moet het maken als een .sql
bestand en verzend het met behulp van de Data API vanuit een Lambda-functie of de CLI.
Maak eerst uw script in een .sql
bestand zonder DELIMITER
commando's of alternatieve scheidingstekens.
Bijvoorbeeld:function.sql
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END
Voer het script vervolgens als volgt uit met behulp van de CLI:
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
U kunt ook een Lambda-functie maken die het bestand leest en gebruikmaakt van rds_client.execute_statement()
om het script via de Data API naar de server te sturen. Maar nogmaals, gebruik NIET de DELIMITER
uitspraak. De server ziet de BEGIN
en END
lijnen en handelt dienovereenkomstig zonder de noodzaak om het scheidingsteken te wijzigen.