0

如何将以下这些触发器保留在一个触发器中?

我已经尝试过了,但我不确定我在做什么错误?

下面是我的触发器

  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;
    
4

2 回答 2

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;

正如这个答案所暗示的那样。

但是,在许多情况下,您还需要使用以下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 ;

本答案所述。

尽管如此,它可能并不总是可以使用DELIMITER,因为这是一条客户端指令而不是一条 MySQL 语句,并且并非所有 MySQL 客户端都支持它。在这种情况下,您可以尝试遵循此答案的建议:使用allowMultiQueries=true连接属性或删除最终属性;(在 之后的那个end)。

于 2014-05-21T06:33:51.320 回答
0

Mysql 不支持所有操作的一个触发器,例如 sql-server 所做的。

您正在按照您在mysql中的方式进行操作。

如果您希望代码集中,您可以创建一个过程并使用新/旧信息和事件标识符 (I/U/D) 从 3 个不同的触发器调用相同的过程。

于 2013-11-02T00:59:39.080 回答