2009-05-15 5 views
5

J'ai une requête comme suit:Pourquoi ai-je une "Cette version de MySQL ne supporte pas encore l'erreur '...'"?

delimiter $$ 
DROP TRIGGER IF EXISTS TR_SCIN_BANK_UPD$$ 
CREATE TRIGGER TR_SCIN_BANK_UPD 
AFTER UPDATE ON SCIN_BANK 
FOR EACH ROW 
BEGIN 
    IF OLD.BANK_NAME != NEW.BANK_NAME THEN 
    INSERT into SCIN_BANK_LOG SET BANK_ID=OLD.BANK_ID, BANK_NAME=OLD.BANK_NAME, LAST_UPD_USER_ID=OLD.LAST_UPD_USER_ID, LAST_UPD_TS=now(); 
    END IF; 
    IF OLD.BANK_DESC != NEW.BANK_DESC THEN 
    INSERT into SCIN_BANK_LOG SET BANK_ID=OLD.BANK_ID, BANK_DESC=OLD.BANK_DESC, LAST_UPD_USER_ID=OLD.LAST_UPD_USER_ID, LAST_UPD_TS=now(); 
    END IF; 
END$$ 

lors de l'exécution, je reçois

Cette version de MySQL ne supporte pas encore « plusieurs déclencheurs avec le même temps d'action et événement pour une table »

cette erreur peut-on fournir une solution pour cela?

Répondre

8

Je suppose qu'il existe déjà un déclencheur AFTER UPDATE sur cette table, mais il n'est pas nommé TR_SCIN_BANK_UPD, ce qui signifie que votre ligne DROP TRIGGER IF EXISTS ne fait rien.

0

oui mysql ne supporte pas cela si vous utilisez le même événement avec un nom de trigger différent et en même temps.

mieux, pour cela, vous devez utiliser si la condition ici: comme ci-dessous:

delimiter $$ 
create trigger trigger_name 
AFTER insert 
on t1 
for each row 
begin 
    if new.col1 like '%Sabcd%' 
    then 
    update t2 inner join t3 on t2.col1=t1.col1 
    set t2.col2=0 ; 
    end if; 
    if new.col1 like '%dcba%' 
    then 
    update t2 inner join t3 on t2.col1=t1.col1 
    set t2.col2=02; 
    end if; 
end; 
$$ 
+0

Je ne pense pas que la syntaxe de mise à jour soit correcte. –

+0

son travail pour moi monsieur .. dites-moi ce qui vous fait penser comme ça – user21546

1

Mysql Mise à niveau à la version 5.6.27 résolu pour moi:

Server version: 5.6.27-0ubuntu0. 14.04.1 (Ubuntu)

Questions connexes