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);

假设我有一个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);
    ...
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;