触发sqlite循环

时间:2014-12-17 11:25:28

标签: sqlite loops triggers

我创建了一个表名profitLoss(具有属性月,借方,贷方,利润,状态),并希望使用触发器来执行利润和状态。插入循环后无法创建我的触发器。

这是我的触发码:

CREATE    TRIGGER    [PROFIT]
AFTER    UPDATE    OF    [credit]
ON    [profitLoss]
BEGIN
UPDATE    profitLoss    SET    profitLoss    = 
cast   (
         (
                  (profitLoss.debit)   -   (profitLoss.credit)
         )    AS    INT
      )  ;

    when    profitLoss.profit < 0    begin
    UPDATE    profitLoss    SET    status    =    'LOSS'  ;

    when    profitLoss.profit > 0    begin
    UPDATE    profitLoss    SET    status    =    'PROFIT'  ;
END;

它给出了结果:

near "when": syntax error:

1 个答案:

答案 0 :(得分:0)

你不能在触发器体内使用WHEN(参见documentation)。 在这种情况下,您可以使用CASE expression在不同的值之间进行选择。

此外,没有WHERE子句的UPDATE语句将更新表中的所有行。 您必须搜索导致触发器运行的行,通常使用一些ID:

CREATE TRIGGER PROFIT
AFTER UPDATE OF credit ON profitLoss
BEGIN
    UPDATE profitLoss
    SET profitLoss = CAST(debit - credit AS INT),
        status     = CASE
                       WHEN profit < 0 THEN 'LOSS'
                       WHEN profit > 0 THEN 'PROFIT'
                       ELSE                 status
                     END
    WHERE ID = NEW.ID;
END;