Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd składni podczas używania ograniczników z Aurora Serverless MySQL 5.6

Spędziłem dzień próbując to rozgryźć, więc mam nadzieję, że to komuś pomoże...

DELIMITER jest cechą klienta, a nie serwera MySQL. Edytor zapytań RDS jest klientem, ale nie obsługuje zmiany ogranicznika, więc próba uruchomienia podanego skryptu nie zadziała, ponieważ po raz pierwszy zobaczy średnik, zinterpretuje to jako koniec polecenia i zakończy się niepowodzeniem błąd składni.

Jak więc utworzyć coś takiego jak procedura składowana, która zawiera wiele instrukcji i średników? Musisz go utworzyć jako .sql pliku i wyślij go za pomocą Data API z funkcji Lambda lub CLI.

Najpierw utwórz skrypt w pliku .sql plik bez DELIMITER poleceń lub alternatywnych ograniczników.

Na przykład:function.sql

CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
   SELECT COUNT(*) INTO param1 FROM t;
END

Następnie uruchom skrypt za pomocą CLI w następujący sposób:

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

Alternatywnie możesz utworzyć funkcję Lambda, która odczytuje plik i używa rds_client.execute_statement() aby wysłać skrypt na serwer za pośrednictwem interfejsu Data API. Ale znowu, NIE używaj DELIMITER oświadczenie. Serwer widzi BEGIN i END linie i działają odpowiednio bez konieczności zmiany ogranicznika.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaktualizować tylko jedną kolumnę tabeli sql za pomocą pliku csv?

  2. Grupuj MySQL według ostatniego wpisu

  3. Czy 'IS DISTINCT FROM' to prawdziwy operator MySQL?

  4. Instalowanie klastra Percona XtraDB na CentOS 7

  5. Wygeneruj sekwencję liczb całkowitych w MySQL