ホームページ >データベース >mysql チュートリアル >MySQL ストアド プロシージャで動的テーブル名を使用するにはどうすればよいですか?
MySQL ストアド プロシージャの動的テーブル名
リレーショナル データベースを使用する場合、さまざまなテーブルからデータを選択することが一般的な要件です。テーブルごとに複数のストアド プロシージャを作成することを避けるために、開発者はストアド プロシージャ内でテーブル名を表す変数を動的に使用する方法を模索することがよくあります。
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
プリペアド ステートメントを使用すると、変数をプレースホルダーにバインドすることで動的 SQL クエリを構築できます。この場合、変数 TableName は SQL クエリ内のプレースホルダーにバインドされます。ストアド プロシージャが実行されると、実際のテーブル名がクエリに置換され、指定されたテーブルから選択できるようになります。
ただし、提供した例では変数 @TableName を直接使用しようとしていることに注意することが重要です。バインディングなしのクエリ内。このアプローチは間違っており、構文エラーが発生します。この問題を解決するには、準備済みステートメントを使用し、SET ステートメントを使用して変数を明示的にバインドする、上記の手法を使用する必要があります。
以上がMySQL ストアド プロシージャで動的テーブル名を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。