私たちのシステムでは、同じ構造を持つ複数のデータベースを使用しています。たとえば、1000 人の顧客がいる場合、1000 のデータベースがあります。各顧客に独自のデータベースを提供することを選択したため、手間をかけずにすべてのデータを一度に削除できます.
現在、データベース構造を年に数回更新する必要があります。そこで、すべてのスキーマをループするストアド プロシージャを書き始めました。しかし、動的 USE ステートメントの実行に行き詰まりました。
私のコードは次のとおりです。
DECLARE V_SCHEMA VARCHAR(100);
SET V_SCHEMA = 'SomeSchemaName';
SET @QUERYSTRING = CONCAT('USE ', V_SCHEMA);
PREPARE S FROM @QUERYSTRING;
EXECUTE S;
DEALLOCATE PREPARE S;
このコードを実行すると、というエラーが表示されますError Code: 1295. This command is not supported in the prepared statement protocol yet
。したがって、プロシージャでアクティブなデータベースを変更できないと想定しています。
私はインターネットを検索しましたが、私が見つけたのは、各変更クエリの文字列を作成し、それを準備/実行/割り当て解除することだけでした。これに対するより良い解決策があることを願っています。スキーマをループして SQL ファイルを実行するシェル スクリプトを作成することもできますが、私はこれを処理するストアド プロシージャを好みます。
これを機能させる方法を知っている人はいますか?
ご協力ありがとうございました!
編集:MySQL 5.6の最新の安定バージョンを使用しています