2014-04-17 65 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;