gpt4 book ai didi

MySQL:如何从触发器内的值创建集合?

转载 作者:行者123 更新时间:2023-11-29 13:02:31 24 4
gpt4 key购买 nike

假设我有一个像这样的 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应该只调用一次。

最佳答案

MySQL 不支持“set”(或“collection”或“array”类型过程变量)。

除了运行返回结果集的查询之外,无法创建“集”,这意味着定义游标、打开游标、循环返回的行。我不会走那条路,这就是四个值不需要的复杂程度和开销。

只有四个值,我只需编写逻辑来进行比较,因为只需要执行六个比较测试。 (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;

请注意,这仍然会使用参数 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;

关于MySQL:如何从触发器内的值创建集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23144031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com