sql >> データベース >  >> RDS >> Mysql

Aurora ServerlessMySQL5.6で区切り文字を使用する場合の構文エラー

    私はこれを理解しようと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 区切り文字を変更することなく、線を引き、それに応じて動作します。



    1. 各ユーザーのレコードを同じテーブルに挿入する前に、既存のレコードを確認するにはどうすればよいですか?

    2. UNIQUEKEYに違反したときに行のIDを取得する

    3. sql:各ユーザーから最も投票されたアイテムを選択します

    4. SQL Serverデータベース内のすべての外部キーとチェック制約を返す(T-SQLの例)