[MySQL] Problème de fonctions et de triggers
Bonjour et meilleurs vœux en cette nouvelle année :)
J'ai récupéré un dump d'une base mysql (5.0.70) et à côté de ça, un fichier avec une liste de trigger et de fonctions.
La base est bien importée mais impossible d'ajouter les triggers et fonctions.
Ne connaissant pas trop ces deux animaux là, et l'erreur renvoyée par mysql ne m'aidant absolument pas (#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4), je m'en remets à vous.
Dans chaque cas, la table et les champs concernés existent bien.
Quelqu'un pourrait-il me dire ce qui cloche svp ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| CREATE TRIGGER contacts_cstm_onInsert BEFORE INSERT ON contacts_cstm
FOR EACH ROW
BEGIN
IF (NEW.password_c ="") OR (NEW.password_c IS NULL) THEN
SET NEW.password_c = SUBSTRING(UUID(), 1, 6);
END IF;
END;
CREATE TRIGGER contacts_cstm_onUpdate BEFORE UPDATE ON contacts_cstm
FOR EACH ROW
BEGIN
IF (NEW.password_c ="") OR (NEW.password_c IS NULL) THEN
SET NEW.password_c = SUBSTRING(UUID(), 1, 6);
END IF;
END;
CREATE TRIGGER factures_onUpdate BEFORE UPDATE ON factures
FOR EACH ROW
BEGIN
SET NEW.locked=(IF(NEW.statut>1,1,0));
END;
CREATE TRIGGER opportunities_onUpdate BEFORE UPDATE ON opportunities
FOR EACH ROW
BEGIN
SET NEW.name=REPLACE(NEW.name," ","");
END;
CREATE TRIGGER opportunities_onInsert BEFORE INSERT ON opportunities
FOR EACH ROW
BEGIN
SET NEW.name=REPLACE(NEW.name," ","");
END;
CREATE FUNCTION FACTURE_SUMALLMONTANT (contactid CHAR(36))
RETURNS DOUBLE
DETERMINISTIC
BEGIN
DECLARE x DOUBLE;
SELECT SUM(IF(fl1.type_ligne=0,fl1.prix_unitaire*fl1.quantite*(1+fl1.tva),0)) INTO x
FROM factures fac
LEFT JOIN facture_ligne fl1 ON fl1.facture_id=fac.id AND fl1.deleted=0 AND fac.statut not in (1,9)
WHERE fac.deleted=0 AND fac.destinataire=contactid;
IF x IS NULL THEN SELECT 0 INTO x;
END IF ;
RETURN x;
END;
CREATE FUNCTION REGLEMENT_SUMALLMONTANT (contactid CHAR(36))
RETURNS DOUBLE
DETERMINISTIC
BEGIN
DECLARE x DOUBLE;
SELECT SUM(montant) INTO x
FROM reglements reg,contacts_reglements conreg
WHERE reg.id=conreg.reglement_id
AND reg.deleted=0
AND conreg.deleted=0
AND reg.statut IN ("BANK_DEPOSIT","CHECK_OK","DRAFT")
AND conreg.contact_id=contactid;
IF x IS NULL THEN SELECT 0 INTO x;
END IF ;
RETURN x;
END;
CREATE FUNCTION BALANCE (contactid CHAR(36))
RETURNS DOUBLE
DETERMINISTIC
BEGIN
DECLARE x DOUBLE;
SELECT FACTURE_SUMALLMONTANT(contactid)-REGLEMENT_SUMALLMONTANT(contactid) INTO x;
IF x IS NULL THEN SELECT 0 INTO x;
END IF ;
RETURN x;
END;
CREATE FUNCTION BALANCE_CONTENTIEUX (contactid CHAR(36))
RETURNS DOUBLE
DETERMINISTIC
BEGIN
DECLARE x DOUBLE;
SELECT BALANCE(contactid)-SUM(IF(type_ligne=0,prix_unitaire*quantite*(1+tva),0)) INTO x
FROM factures fac, facture_ligne fl
WHERE fl.facture_id=fac.id
AND fac.destinataire=contactid
AND fl.deleted=0 AND fac.deleted=0
AND MONTH(fac.date_facture)=MONTH(CURDATE())
AND YEAR(fac.date_facture)=YEAR(CURDATE());
IF x IS NULL THEN SELECT 0 INTO x;
END IF ;
RETURN x;
END; |
Merci.