Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kesalahan sintaks saat menggunakan Pembatas dengan Aurora Tanpa Server MySQL 5.6

Saya menghabiskan satu hari mencoba mencari tahu, jadi semoga ini bisa membantu seseorang di luar sana...

DELIMITER adalah fitur klien, bukan server MySQL. Editor Kueri RDS adalah klien tetapi tidak mendukung perubahan pembatas sehingga mencoba menjalankan skrip yang Anda berikan tidak akan berfungsi sejak pertama kali melihat titik koma, ia akan menafsirkannya sebagai akhir dari perintah dan gagal dengan kesalahan sintaks.

Jadi, bagaimana Anda membuat sesuatu seperti prosedur tersimpan yang memiliki banyak pernyataan dan titik koma di dalamnya? Anda harus membuatnya sebagai .sql file dan mengirimkannya menggunakan Data API baik dari fungsi Lambda atau CLI.

Pertama, buat skrip Anda di .sql file tanpa DELIMITER perintah atau pembatas alternatif.

Misalnya:function.sql

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

Kemudian jalankan script tersebut menggunakan CLI seperti ini:

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

Atau, Anda dapat membuat fungsi Lambda yang membaca file dan menggunakan rds_client.execute_statement() untuk mengirim skrip ke server melalui Data API. Tapi sekali lagi, JANGAN gunakan DELIMITER penyataan. Server melihat BEGIN dan END garis dan bertindak sesuai tanpa perlu mengubah pembatas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengelompokkan tabel dalam database MySQL

  2. Masukkan nilai Array masukkan ke ID tunggal ke dalam database mysql menggunakan php dan PDO

  3. Bagaimana cara mencocokkan email atau telepon dengan Elasticsearch?

  4. Akses MySQL ditolak karena kesalahan pengguna?

  5. MYSQL cara membuka kunci tabel jika saya menggunakan perintah LOCK table table_name MENULIS;