2

問題の説明

シングルテナントの MySQL データベースをセットアップしています。つまり、クライアントごとに同一のスキーマが 1 つあります。

ここで、クライアントごとに特定のクエリを実行する必要があります。これは、マルチテナント設定 (すべてのクライアントが 1 つのスキーマを共有する) では簡単です。ただし、私のセットアップでは、スキーマを反復する必要があります。より一般的には、名前が変数によって与えられるスキーマにアクセスしたいと考えています。どうすればそれができますか?

私が試したこと

  • 試してみるとUSE varSchemaName(wherevarSchemaNamevarchar 変数)、エラー メッセージERROR 1314: USE is not allowed in stored procedure が表示されます。

  • 試してみるSELECT * FROM varSchemaName.MyTableと、 Error Code: 1146. Table 'varSchemaName.MyTable' does not exist が表示されます。どうやらMySQLvarSchemaNameは変数ではなくリテラルと見なします。

4

2 に答える 2

1

最初にステートメントを作成する必要があります。

SET @sql = CONCAT('SELECT * FROM ', varSchemaName, '.MyTable');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

プリペアド ステートメントの詳細については、こちらを参照してください。

テーブル名に変数を使用したくなるかもしれませんが、それはうまくいきません。これらのパラメーターは、where 句などの値用です。上記の方法が行き方です。

于 2012-12-11T10:32:21.677 に答える