我知道我不能在触发器内执行事务,但我可以在一个过程中执行。我应该能够从触发器调用一个过程。这正是我正在做的事情。
表A具有“更新后触发器”。 我只想在两列中的一列被更改的情况下调用该过程。
表A TRIGGER:
IF (
NEW.colA != OLD.colA
OR
NEW.colB != OLD.colB
) THEN
call setBonuses( NEW.colA, NEW.colB );
END IF
setBonuses SP通过使用TABLE_A.colA,TABLE_A.colB进行一些计算来影响表B(我不认为它是相关的,但是表B确实有一个“更新后的触发器”,但是它有一个条件只做如果不受以下程序影响的字段发生更改,则更新,因此当奖励字段更新时,它“没有”。)
存储过程:
begin
IF A > B THEN
SET n = A;
...
ELSEIF A < B THEN
SET n = B;
...
END IF;
start transaction;
-- Bonuses
UPDATE TABLE_B
SET bonus = 0
WHERE... ;
UPDATE TABLE_B
SET bonus = bonus + n
WHERE...;
UPDATE TABLE_B
SET bonus = bonus + n
WHERE...;
UPDATE TABLE_B
SET bonus = bonus + n
WHERE...;
UPDATE TABLE_B
SET bonus = bonus + n
WHERE...;
UPDATE TABLE_B
SET bonus = bonus + n
WHERE...;
commit;
end
如果应用程序直接调用SP,SP工作正常,但是,我不想在某些情况下显式地将其称为链,我真的只需要它来执行其计算并更新表B - 每当有人改变了表A(colA或colB)。
任何不可能的原因。