4

ユーザー定義変数を使用してクリーンなトリガーを作成しようとしているので、これが私のコードです:


SET @target_bdd = 'trigger_second';
SET @trigger_name = 'account_copy';
SET @table_name = 'account';
SET @primary_key = 'id';

DROP TRIGGER IF EXISTS `@trigger_name`;

DELIMITER $$

CREATE TRIGGER `@trigger_name` AFTER INSERT
    ON `@table_name`
FOR EACH ROW BEGIN
    INSERT INTO `@target_bdd`.`@table_name`
    SELECT * FROM `@table_name` 
    WHERE `@primary_key` = NEW.`@primary_key`; 
END $$
DELIMITER ;

しかし、私はこのエラーがあります:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds >to your MySQL server version for the right syntax to use near '@table_name
FOR EACH ROW BEGIN INSERT INTO `@target_bdd`.`@table_name` SELECT * ' at line 2

なんで ?他の引用符 ('") で試してみましたが、同じエラーがあります:(

引用符なし:

エラー 1064 (42000): SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、1 行目の '@trigger_name AFTER INSERT ON @table_name FOR EACH ROW BEGIN INSERT INTO @target' の近くで使用する正しい構文を確認してください。

次のようなSQL命令でユーザー定義変数を宣言しようとしました:

SET @sql = CONCAT(
    'CREATE TRIGGER ',
    @trigger_name,
    ' AFTER INSERT ON ',
    @table_name,
    ' FOR EACH ROW BEGIN INSERT INTO ',
    @target_bdd,
    '.',
    @table_name,
    ' SELECT * FROM ',
    @table_name, 
    ' WHERE ',
    @primary_key,
    ' = NEW.',
    @primary_key, 
    '; END'
    );

PREPARE stmt FROM @sql;
EXECUTE stmt;

しかし、エラー 1295 があります ( MySQL のドキュメントを参照)

4

2 に答える 2

1

プレーン SQL では、テーブル名、列などにユーザー変数を使用できません。準備されたステートメントでトリガーを作成することもできません(エラーが伝えたように)。現在、あなたが望むことをする方法はないようです。

于 2011-07-26T11:27:52.473 に答える
0

これまでユーザー定義変数を使用したことがないと言わざるを得ませんが、テストしたところ、それらを引用してはならないことがわかりました。`@vars` を引用すると、mysqlは格納されている値ではなく、リテラル フィールド
を探します。'@vars'

于 2011-07-26T08:39:24.830 に答える