是否可以将新表和旧表从触发器传递到MySQL中的过程中?
是否可以将新表和旧表从触发器传递到MySQL中的过程中? 我怀疑没有,因为不存在过程接受的表这样的数据类型。 有可能的解决办法吗 理想情况下,它将如下所示:是否可以将新表和旧表从触发器传递到MySQL中的过程中?,mysql,triggers,Mysql,Triggers,是否可以将新表和旧表从触发器传递到MySQL中的过程中? 我怀疑没有,因为不存在过程接受的表这样的数据类型。 有可能的解决办法吗 理想情况下,它将如下所示: CREATE TRIGGER Product_log AFTER UPDATE ON Product FOR EACH ROW BEGIN call logChanges(OLD, NEW); END; BEGIN IF OLD.customer_name != NEW.customer_name THEN
CREATE TRIGGER Product_log AFTER UPDATE ON Product
FOR EACH ROW BEGIN
call logChanges(OLD, NEW);
END;
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;
这是不可能的,因为没有新的或旧的桌子。整个触发器与表相关,“新”和“旧”是指在触发事件之前和之后包含的行及其值。换句话说,你的例子是:
call logChanges(OLD.customername, NEW.customername)
您还可以将所有旧数据保存在历史表中(我希望logchanges会这样做),基本上是生产表的克隆,如下所示:
CREATE TRIGGER Product_log AFTER UPDATE ON Product
FOR EACH ROW BEGIN
call logChanges(OLD, NEW);
END;
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;
可以显式传递每个字段:
CALL logChanges(OLD.colA, OLD.colB, NEW.colA, NEW.colB);
或者,如果logChanges
必须具有足够的通用性,以处理来自不同表的此类调用,则可以使用合适的分隔符将字段值连接成单个字符串(例如:
或者,如果必须保留数据类型,可以将记录插入一个临时文件中,
logChanges
从中读取。我也有同样的问题/要求。你有没有找到工作(可能效率很高?)