MySQL では、ストアド プロシージャと関数は、データベース内で複雑な操作を実行するための強力なメカニズムを提供します。ただし、動的テーブル名を使用する場合、特定の制限が発生します。
関数を使用してテーブルからデータを取得するには、次のようなクエリを利用できます。
SELECT 'name' INTO myName FROM tableName WHERE >
ただし、動的テーブル名でこのアプローチを使用すると、実際のテーブル名が変数名 tableName に置き換えられるため、エラーが発生します。
この問題を回避するには、プリペアド ステートメントを使用します。
SET @GetName = CONCAT(" SELECT 'name' FROM ", tableName, " WHERE >
残念ながら、MySQL ではそのようなコンテキストでの動的 SQL が禁止されているため、この方法はストアド プロシージャ関数ではサポートされていません。
代わりに、OUT パラメータを使用してストアド プロシージャを作成することもできます。
CREATE PROCEDURE getName (IN tableName VARCHAR(50), IN myId INT(11), OUT myName VARCHAR(50)) BEGIN SET @GetName = CONCAT('SELECT name INTO @var1 FROM ', tableName, ' WHERE>
動的テーブル名を使用してこのプロシージャを呼び出すには、次の構文を使用できます。 :
SET @tableName = 'tbl'; SET @myId = 1005; SET @name = NULL; CALL getName(@tableName, @myId, @name); SELECT @name;
このメソッドを使用すると、ストアド プロシージャ内のさまざまなテーブルのデータに動的にアクセスできるため、データベース操作の柔軟性が高まります。
以上がMySQL ストアド プロシージャと関数で動的テーブル名を操作するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。