MySQL:如何从触发器中的值创建一个集合?
假设我有一个MySQL触发器,如下所示:MySQL:如何从触发器中的值创建一个集合?,mysql,stored-procedures,Mysql,Stored Procedures,假设我有一个MySQL触发器,如下所示: DELIMITER ;; CREATE TRIGGER test_trigger AFTER UPDATE ON test_table FOR EACH ROW BEGIN CALL storedRoutine(OLD.col1); CALL StoredRoutine(NEW.col1); CALL storedRoutine(OLD.col2); CALL StoredRoutine(NEW.col2);
DELIMITER ;;
CREATE TRIGGER test_trigger AFTER UPDATE ON test_table
FOR EACH ROW BEGIN
CALL storedRoutine(OLD.col1);
CALL StoredRoutine(NEW.col1);
CALL storedRoutine(OLD.col2);
CALL StoredRoutine(NEW.col2);
...
END;;
如何创建一组唯一值(OLD.col1
,NEW.col1
,OLD.col2
,NEW.col2
,等等),并仅为唯一值调用存储的例程?例如,如果OLD.col1==NEW.col1
,则应只调用一次storedurotine
。MySQL不支持“set”(或“collection”或“array”类型的过程变量
除了运行返回resultset的查询之外,没有办法创建“集合”,这意味着定义一个游标,打开游标,循环返回的行。我不会走这条路线,因为四个值不需要复杂度和开销
只有四个值,我只需要编写逻辑代码来进行比较,因为只需要执行六个比较测试。(0+1+2+3)
注意,这仍然会使用参数的NULL值多次调用该过程,我相信空安全比较器(
)可以像在SQL中一样在存储程序中工作,但您可能根本不想调用该过程,因为参数为NULL
IF NOT ( NEW.col2 IS NULL OR
NEW.col2 = OLD.col2 OR
NEW.col2 = NEW.col1 OR
NEW.col2 = OLD.col1 ) THEN
END IF;
IF NOT ( NEW.col2 IS NULL OR
NEW.col2 = OLD.col2 OR
NEW.col2 = NEW.col1 OR
NEW.col2 = OLD.col1 ) THEN
END IF;