MySQL ストアド プロシージャでテーブル名に変数を使用する
MySQL ストアド プロシージャを使用する場合、テーブル名を次のように渡すと便利です。パラメータを使用すると、さまざまなテーブルからデータを選択する際の柔軟性が向上します。ただし、プロシージャ内のパラメータとしてテーブル名を指定するだけでは、期待どおりに動作しない可能性があります。
テーブル名をストアド プロシージャに正しく渡すには、SQL の実行を可能にする動的 SQL を使用する必要があります。実行時に構築されるステートメント。これを実現する 1 つの方法は、プリペアド ステートメントを使用することです。
次の例を考えてみましょう:
CREATE PROCEDURE `usp_SelectFromTables`( IN TableName varchar(100) ) BEGIN SET sql_text = CONCAT('SELECT * FROM ', TableName); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
このプロシージャでは、受信した TableName パラメータを使用して動的 SQL ステートメントを構築します ( sql_text) が準備され、実行されます。これにより、ストアド プロシージャは、実行時に指定されたテーブルに対して SELECT クエリを実行できるようになります。
また、次に示すように、準備されたステートメントの呼び出し内で動的 SQL を直接構築することもできます。
SET sql_text = CONCAT('select concept_id,concept_name,',@vname,' from enc2.concept a JOIN enc2.ratings b USING(concept_id) where concept_name like (''%',@cname,'%'') and 3 is not null order by 3 asc'); PREPARE stmt FROM sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt;
このアプローチにより、SQL ステートメントを保持する追加の変数が不要になり、コードが簡素化されます。
動的 SQL を使用することで、テーブルを渡すことができます。名前をストアド プロシージャのパラメータとして使用できるため、入力パラメータに基づいてさまざまなテーブルからデータを動的に選択できるようになります。
以上がMySQL ストアド プロシージャでテーブル名に変数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。