7

NEWテーブルとOLDテーブルをトリガーからMySQLのプロシージャに渡すことは可能ですか?プロシージャが受け入れるテーブルのようなデータ型がないので、私はノーだと思います。可能な回避策はありますか?

理想的には、次のようになります。

CREATE TRIGGER Product_log AFTER UPDATE ON Product
  FOR EACH ROW BEGIN
    call logChanges(OLD, NEW);
  END;
4

2 に答える 2

1

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;
于 2012-06-04T17:08:44.503 に答える