MySQL存储过程问题if then else语句

时间:2012-09-01 14:12:50

标签: mysql procedures

我需要将更改存储在发票系统中,以将其导出到帐户系统(这是第三方应用程序)。

我要做的是添加两个触发器。

  1. ON INSERT:添加新发票,必须在另一个表中将其标记为新发票,因此在下一次迁移中,生成适当的ASCII以将其导入会计系统。

  2. ON UPDATE:这有点复杂,这可能发生在修改发票或发票付款/或者标记为付款且最终没有付款时。

  3. 两个触发器都调用相同的过程。

    DROP PROCEDURE IF EXISTS `marca_factura_modificada`;
    DELIMITER |
    CREATE PROCEDURE `marca_factura_modificada`( IN nempresa_in int, IN nfactura_in int, IN cany_in char(2), IN cobrada boolean  )
    BEGIN
        DECLARE existeix_factura INT;
        DECLARE abans_afegir_factura INT;
        DECLARE abans_afegir_cobrament INT;
    
        SELECT NFactura,afegir_factura,afegir_cobrament 
                   INTO existeix_factura,abans_afegir_factura,abans_afegir_cobrament 
                   FROM factures_modificades 
                   WHERE NEmpresa = nempresa_in 
                         AND NFactura = nfactura_in 
                         AND CAny = cany_in 
                         LIMIT 1;
        IF existeix_factura IS NULL THEN
            IF new.DataFactura = CURDATE() THEN
                IF (new.LComptat = 1 OR new.LCreditCobrat = 1) THEN
                    INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) 
                        VALUES (nempresa_in, nfactura_in, cany_in,1,1);
                ELSE
                    INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) 
                        VALUES (nempresa_in, nfactura_in, cany_in,1,0);
                END IF
            ELSE
                /* Si no és d'avui i no hi ha registre es que ja es va afegir la factura en el seu dia */
                INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) 
                VALUES (nempresa_in, nfactura_in, cany_in,0,1);
            END IF
        ELSE
            IF(cobrada = 0 AND abans_afegir_factura = 0) THEN
                DELETE FROM factures_modificades WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in LIMIT 1;
            ELSEIF (cobrada = 1 AND abans_afegir_cobrament = 0) THEN
                UPDATE factures_modificades SET afegir_cobrament =  1 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
            ELSEIF (cobrada = 0 AND abans_afegir_cobrament = 1) THEN
                UPDATE factures_modificades SET afegir_cobrament = 0 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
            END IF
        END IF
    END
    |
    DELIMITER ;
    

    但这对mysql 5.5不起作用(我认为在IF THEN ELSE代码中存在一些问题,但我不知道在哪里。

1 个答案:

答案 0 :(得分:4)

解决!

现在它有效。问题是END IF想要一个;最后。

DROP PROCEDURE IF EXISTS `marca_factura_modificada`;
DELIMITER |
CREATE PROCEDURE `marca_factura_modificada`( IN nempresa_in int, IN nfactura_in int, IN cany_in char(2), IN cobrada boolean,IN DataFactura date  )
BEGIN
    DECLARE existeix_factura INT;
    DECLARE abans_afegir_factura INT;
    DECLARE abans_afegir_cobrament INT;
    SELECT NFactura,afegir_factura,afegir_cobrament 
               INTO existeix_factura,abans_afegir_factura,abans_afegir_cobrament 
               FROM factures_modificades 
               WHERE NEmpresa = nempresa_in 
                     AND NFactura = nfactura_in 
                     AND CAny = cany_in 
                     LIMIT 1;
    IF (existeix_factura) IS NULL THEN 
            IF (DataFactura = CURDATE()) THEN 
                IF (cobrada) THEN INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) VALUES (nempresa_in, nfactura_in, cany_in,1,1);
                ELSE INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) VALUES (nempresa_in, nfactura_in, cany_in,1,0);
                END IF;
            ELSE INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament )  VALUES (nempresa_in, nfactura_in, cany_in,0,1);
            END IF;
    ELSE
        IF(cobrada = 0 AND abans_afegir_factura = 0) THEN DELETE FROM factures_modificades WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in LIMIT 1;
        ELSEIF (cobrada = 1 AND abans_afegir_cobrament = 0) THEN UPDATE factures_modificades SET afegir_cobrament =  1 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
        ELSEIF (cobrada = 0 AND abans_afegir_cobrament = 1) THEN UPDATE factures_modificades SET afegir_cobrament = 0 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
        END IF;
    END IF;
END
|
DELIMITER ;