ホームページ >データベース >mysql チュートリアル >ストアド プロシージャ関数で動的に参照されるテーブルをクエリするにはどうすればよいですか?
ストアド プロシージャ関数でのテーブルの動的参照
ストアド プロシージャ関数を作成する場合、テーブルの名前を動的に指定する必要が生じる場合があります。問い合わせるために。この課題は、動的 SQL の制限のため、関数内の SQL ステートメントの FROM 句で変数を直接使用できないために発生します。
回避策としてのプリペアド ステートメント
回避策の 1 つは、準備されたステートメントを使用することです。ストアド プロシージャでは、準備されたステートメントを使用して動的 SQL クエリを構築できます。ただし、このアプローチは、プリペアド ステートメントの使用が禁止されているため、関数には適していません。
OUT パラメーターを含むストアド プロシージャ
この制限に対処するための代替方法は、次のとおりです。目的の値を返す 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;
この手法を使用すると、OUT パラメーターを使用したストアド プロシージャを利用して、ストアド プロシージャ関数内で動的テーブル名を効率的にクエリできるようになります。
以上がストアド プロシージャ関数で動的に参照されるテーブルをクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。