NEWテーブルとOLDテーブルをトリガーからMySQLのプロシージャに渡すことは可能ですか?プロシージャが受け入れるテーブルのようなデータ型がないので、私はノーだと思います。可能な回避策はありますか?
理想的には、次のようになります。
CREATE TRIGGER Product_log AFTER UPDATE ON Product
FOR EACH ROW BEGIN
call logChanges(OLD, NEW);
END;
NEWまたはOLDテーブルがないため、これは不可能です。トリガー全体はテーブルに関連しています。「new」と「old」は、トリガーされたイベントの前後に含まれる行と値を指します。言い換えれば、あなたの例は次のようになります。
call logChanges(OLD.customername, NEW.customername)
また、すべてのOLDデータを履歴テーブルに保存することもできます(logchangesはとにかくそうすることを期待しています)。基本的には、次のような本番テーブルのクローンです。
BEGIN
IF OLD.customer_name != NEW.customer_name
THEN
INSERT INTO myTable_chagne_history
(
customer_id ,
customer_name ,
another_field ,
edit_time
)
VALUES
(
OLD.customer_id,
OLD.customer_name,
OLD.another_field ,
NEW.time_edit_was_made
);
END IF;
END;