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.