Bonjour,
j'ai une procédure stockée dont le comportement ne me satisfait pas du tout.
Le IF / ELSE est bien géré, la variable étant type_offre étant correctement instanciée... Mais c'est après que ça se gâte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CREATE FUNCTION `automates`.`checkLienProdAutomate`(idproduit INT(11), idautomate INT(11)) RETURNS TINYINT DETERMINISTIC BEGIN DECLARE islinked TINYINT DEFAULT 0; DECLARE typeoffre TINYINT DEFAULT 0; SELECT `automates`.`TYPE_OFFRE` INTO typeoffre FROM `automates`.`automates` WHERE `automates`.`ID_AUTOMATE` = idautomate LIMIT 1; IF typeoffre = 0 THEN SELECT COUNT(*) INTO islinked FROM `automates`.`autotype_produits` WHERE `autotype_produits`.`ID_PRODUIT` = idproduit AND `autotype_produits`.`ID_TYPE_AUTOMATE` = (SELECT `automates`.`ID_TYPE_AUTOMATE` FROM `automates`.`automates` WHERE `automates`.`ID_AUTOMATE` = idautomate) LIMIT 1; ELSEIF typeoffre = 1 THEN SELECT COUNT(*) INTO islinked FROM `automates`.`auto_produits` WHERE `auto_produits`.`ID_PRODUIT` = idproduit AND `auto_produits`.`ID_AUTOMATE` = idautomate LIMIT 1; END IF; RETURN islinked; END//
La var islinked reçoit la cardinalité des tables requêtées (au lieu du nombre de cas sélectionnés ... égal à 1).
Si je remplace les 'SELECT COUNT(*)' par des 'SELECT 1', islinked est systématiquement à 1...
Voyez-vous une erreur flagrante dans ma logique ?
Partager