Прекарах един ден, опитвайки се да разбера това, така че се надявам това да помогне на някой там...
DELIMITER
е характеристика на клиента, а не на MySQL сървъра. RDS Query Editor е клиент, но не поддържа промяна на разделителя, така че опитът за стартиране на скрипта, който сте предоставили, няма да работи, тъй като първия път, когато види точка и запетая, той ще интерпретира това като края на командата и ще се провали с синтактична грешка.
И така, как да създадете нещо като съхранена процедура, която има множество изрази и точки и запетая? Трябва да го създадете като .sql
файл и го изпратете с помощта на API за данни от ламбда функция или от CLI.
Първо създайте своя скрипт в .sql
файл без DELIMITER
команди или алтернативни разделители.
Например:function.sql
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END
След това стартирайте скрипта с помощта на 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
Като алтернатива можете да създадете ламбда функция, която чете файла и използва rds_client.execute_statement()
да изпратите скрипта до сървъра чрез Data API. Но отново, НЕ използвайте DELIMITER
изявление. Сървърът вижда BEGIN
и END
линии и действа съответно, без да е необходимо да променяте разделителя.