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

ストアドプロシージャMySQLでの動的クエリの作成

    pAreaを連結しています 引用符で囲まれていないSQLへのパラメータ。つまり、@Queryのコンテンツです。 実行の準備をするのは:

    SELECT PinCode FROM Areas WHERE AreaName = Teynampet
    

    Teynampet以降 引用符で囲まれていない場合は、文字列ではなく(n個の不明な)SQL識別子として解析されます。次のいずれかを行う必要があります:

    • SQLで引用してください:

      SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
      
    • それをパラメータとしてプリペアドステートメントに渡します:

      SET @City  = CONCAT(' WHERE AreaName = ?');
      SET @param = pArea;
      

      そして:

      EXECUTE stmt USING @param;
      

    しかし、なぜここでプリペアドステートメントを使用するのですか?プロシージャは、単純なSELECTとして書き直すことができます。 (これにより、ストアドプロシージャを使用する必要があるかどうかという疑問が生じます):

    CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
      SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
    

    NULLを使用することをお勧めします。 空の文字列の代わりに'' 、この場合、上記のテストはpArea IS NULL OR pArea = AreaNameになります。 。




    1. 本番環境でPostgreSQLを管理するためのツールの統合

    2. メインクエリデータ変数を使用したMySQLサブクエリ

    3. MYSQLは値によるカウントを選択します

    4. mysqlでsoundex()をクエリする方法