MySQL ストアド プロシージャと関数で動的テーブル名を操作するにはどうすればよいですか?

DDD
リリース: 2024-11-12 05:43:01
オリジナル
883 人が閲覧しました

How to Work with Dynamic Table Names in MySQL Stored Procedures and Functions?

ストアド プロシージャ関数の動的テーブル名

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート