0

データベース名を引数として取り、そのデータベース内で MULTI DELETE を発行する MySQL 5.1 用のプロシージャを作成しようとしています。回避方法がわからない 2 つの問題が発生しています。

  • USE準備済みステートメントでは使用できません。試してみると、「このコマンドは、準備済みステートメント プロトコルではまだサポートされていません」というメッセージが表示されます。
  • MULTI DELETE では、別のデータベースのテーブルを削除できません。試してみると、「MULTI DELETE の不明なテーブル 'x'」と表示されます。

コードサンプルは次のとおりです。

DELIMITER $$
CREATE PROCEDURE multi_test (
    IN dbname VARCHAR(20)
)
BEGIN
    SET @us = CONCAT('USE ', dbname, ';');
    PREPARE ustmt FROM @us;
    EXECUTE ustmt;
    DEALLOCATE PREPARE ustmt;
    SET @s = CONCAT('DELETE t FROM ', dbname, '.t as t INNER JOIN ', dbname, '.t2 as t2 IN t.f_id = t2.id');
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

この場合も、「このコマンドは準備済みステートメント プロトコルではまだサポートされていません」という結果になります。

もう 1 つの目的は、これを MySQL に保持することです。MySQL に接続するスクリプト言語を使用するのではなく、クライアント CLI から呼び出すことができる MySQL プロシージャをいくつか用意するだけです。ただし、MySQL で可能であれば、(PostgreSQL でできるように) 他の言語でプロシージャを使用することに反対はしません。

4

1 に答える 1