2013-11-02 5 views
0

Как я могу удерживать ниже триггеры в одном триггере?Как настроить мульти триггеры mysql

Я пробовал, но я не уверен, какую ошибку я делаю?

Ниже моего триггера

  1. create trigger Disminuir_Existencia1 
    after insert 
    on detalle 
    for each row 
    update producto set existencia = 
             existencia-new.Cantidad 
             where id_p=new.id_p 
    
  2. create trigger Aumentar_Existencia 
    after insert 
    on detalle 
    for each row  
    
    update producto set existencia =if(new.activo = 0, producto.existencia + 
    new.cantidad,producto.existencia) 
    
    where new.id_P = producto.id_P 
    
  3. CREATE TRIGGER aumentar 
    AFTER insert 
    on detalle 
    for each row 
    
    update factura set total = 
    ( 
        select producto.precio * new.cantidad 
        from producto 
        where new.id_p=producto.id_p) 
    
    where new.Folio= factura.folio; 
    

ответ

1

Правильное решение в вашей ситуации может зависеть от того, что вы на самом деле уже пробовали и каковы были ваши попытки.

Например, может оказаться, что вам нужно просто приложить свои UPDATE заявления в BEGIN ... END и этого будет достаточно:

create trigger CombinedDetalleInsertTrigger 
after insert 
on detalle 
for each row 
begin 
    update ... where id_p=new.id_p; 

    update ... where new.id_P = producto.id_P; 

    update ... where new.Folio= factura.folio; 
end; 

как this answer suggests.

Во многих случаях, однако, вы также должны использовать DELIMITER инструкцию:

delimiter $$ 

create trigger CombinedDetalleInsertTrigger 
after insert 
on detalle 
for each row 
begin 
    update ... where id_p=new.id_p; 

    update ... where new.id_P = producto.id_P; 

    update ... where new.Folio= factura.folio; 
end$$ delimiter ; 

, как объяснено в this answer.

По-прежнему не всегда возможно использовать DELIMITER, так как это инструкция клиента rather than a MySQL statement, и не все клиенты MySQL поддерживают его. В этом случае вы можете попробовать следующие предложения this answer: используйте свойство подключения allowMultiQueries=true или удалите окончательный ; (тот, который после end).

0

Mysql не поддерживает один триггер для всех операций, как, например, SQL-сервер делает.

Вы делаете это так, как вам нужно в mysql.

Если вы хотите, чтобы код централизован, вы можете создать процедуру и вызвать ту же процедуру из трех разных триггеров с информацией NEW/OLD и идентификатором события (I/U/D).

Смежные вопросы