2014-04-17 35 views
0

假设我有一个MySQL触发器是这样的: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.col1NEW.col1OLD.col2NEW.col2等),并调用存储程序只为唯一值?例如,如果OLD.col1 == NEW.col1,那么应该只调用一次storedRoutine一次。

回答

1

MySQL不支持“设置”(或“收集”或“阵列”类型的程序变量。

有没有方法来创建一个运行一个返回结果查询“设置”与众不同之处,将意味着定义一个游标,打开游标,循环遍历返回的行,我不会去那条路线,这是复杂程度和开销是不需要的四个值

只有四个值,我会(0 + 1 + 2 + 3)

IF NOT (NEW.col1 = OLD.col1) THEN 

END IF; 

IF NOT (OLD.col2 = NEW.col1 OR 
      OLD.col2 = OLD.col1) THEN 

END IF; 

IF NOT (NEW.col2 = OLD.col2 OR 
      NEW.col2 = NEW.col1 OR 
      NEW.col2 = OLD.col1) THEN 

END IF; 
(只有6个比较测试需要执行)。

注意这仍然会调用该过程多次使用NULL值作为参数,我相信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;