ストアド プロシージャ関数の動的テーブル名
問題ステートメント:
目的は次のとおりです。テーブルから値を取得するストアド プロシージャ関数を作成します。テーブル名はパラメータとして動的に指定されます。ただし、関数内で SQL ステートメントを動的に生成しようとすると、「動的 SQL は許可されていません...」エラーが発生します。要件は、この制限を克服して望ましい結果を達成する方法を見つけることです。
解決策:
ストアド プロシージャ関数内では動的 SQL は許可されていませんが、許可されています。プリペアドステートメントを利用して 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>
このプロシージャは、入力パラメータ tableName と myId を受け入れます。 myName OUT パラメータを取得した値に設定します。このプロシージャは、SQL ステートメントを動的に構築し、準備されたステートメントを実行に使用します。
このプロシージャを使用するには、次の手順に従います。
SET @tableName = 'tbl'; SET @myId = 1005; SET @name = NULL; CALL getName(@tableName, @myId, @name); SELECT @name;
このソリューションでは、さまざまなステートメントから値を動的に取得できます。ストアド プロシージャ内のテーブル。
以上がストアド プロシージャで動的に指定されたテーブルからデータを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。