私はこれを理解しようと1日を費やしたので、うまくいけば、これが誰かを助けてくれるでしょう...
DELIMITER
これはクライアントの機能であり、MySQLサーバーではありません。 RDSクエリエディタはクライアントですが、区切り文字の変更をサポートしていないため、指定したスクリプトを実行しようとしても、最初にセミコロンが表示されたときにコマンドの終わりとして解釈され、次のように失敗するため、機能しません。構文エラー。
では、複数のステートメントとセミコロンを含むストアドプロシージャのようなものをどのように作成しますか? .sql
として作成する必要があります ファイルを作成し、Lambda関数またはCLIのいずれかからDataAPIを使用して送信します。
まず、.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()
を使用するLambda関数を作成することもできます。 データAPIを介してスクリプトをサーバーに送信します。ただし、ここでも、DELIMITER
は使用しないでください。 声明。サーバーはBEGIN
を認識します およびEND
区切り文字を変更することなく、線を引き、それに応じて動作します。