MySQL Gespeicherte Prozeduren Problem mit wenn dann sonst Aussagen

Habe ich die Notwendigkeit zum speichern der änderungen die in unserer Rechnung system zu exportieren, um das Konto system (das ist ein 3rd-party-app).

Was ich versuche zu tun ist, fügen Sie zwei Auslöser.

  1. AUF EINFÜGEN : EINE neue Rechnung Hinzugefügt wird, muss es gekennzeichnet werden, als neue in einer anderen Tabelle, so in den nächsten migration, erzeugen Sie den entsprechenden ASCII-import in das Buchhaltungssystem.

  2. ON UPDATE: Das ist ein bisschen komplizierter, das kann passieren, wenn eine Rechnung geändert wird oder wenn eine Rechnung bezahlt wird /oder es war gekennzeichnet bezahlt werden und es schließlich nicht.

Beide Trigger Aufruf der gleichen Prozedur.

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 ;

Aber das funktioniert nicht auf mysql 5.5 (ich glaube, es gibt einige Problem in der WENN, DANN, SONST-code, aber ich sehe nicht ein, wo.

  • Dies ist eine komplizierte Frage. Es gibt viele, viele Möglichkeiten, eine gespeicherte Prozedur kann "nicht arbeiten". Bitte erläutern Sie, was das problem ist, dass Sie haben.
  • Das problem scheint in der "INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) VALUES (nempresa_in, nfactura_in, cany_in,0,1);" dies ist eine seiner nach dem zweiten anderes. Ich weiß nicht, aber ich denke, dass die schlecht ist ist die WENN-DANN-SONST-Anweisungen... gibt es eine Möglichkeit, Sie zu trennen? Ich meine, wie Sie in php if (irgendwas){ some_stuff(); }else if(something_else) {das();} else { another_stuff();}
InformationsquelleAutor MiQUEL | 2012-09-01
Schreibe einen Kommentar