Mysql
 sql >> база данни >  >> RDS >> Mysql

Синтактична грешка при използване на разделители с MySQL без сървър Aurora 5.6

Прекарах един ден, опитвайки се да разбера това, така че се надявам това да помогне на някой там...

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 линии и действа съответно, без да е необходимо да променяте разделителя.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. if elseif условия в mysql заявка

  2. MySQL Regexp поддържа ли съвпадение на Unicode

  3. Помощ за функциите на часовата зона

  4. MySQL заявки

  5. MySQL низ замяна