IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Affectation d'une variable sur un SELECT


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut Affectation d'une variable sur un SELECT
    Bonjour,

    j'ai une procédure stockée dont le comportement ne me satisfait pas du tout.

    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//
    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.

    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 ?

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Quand tu insères SELECT 1 dans une variable (islinked ici), et que ta requête renvoie plusieurs lignes, c'est le contenu d'une seule de ces lignes qui est insérée dans la variable (très certainement la dernière ligne renvoyée par la requête).
    C'est donc logique que islinked vaille 1...

    Que cherches-tu à obtenir exactement dans cette variable ?

    ced

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Merci de ton aide.

    En fait mon problème était bien plus bête : j'ai mal renseigné le type d'un paramètre d'entrée... Je ne comprends pas les conséquences mais le problème est réglé !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacer un champ par une variable sur une select from deleted
    Par Estomac dans le forum Développement
    Réponses: 4
    Dernier message: 14/03/2014, 15h16
  2. Réponses: 1
    Dernier message: 06/01/2012, 00h31
  3. récupérer une variable dans un select case
    Par rob2-9 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 23/12/2005, 10h54
  4. Pl/SQL utilisation d'une variable dans un select
    Par larg dans le forum PL/SQL
    Réponses: 17
    Dernier message: 30/11/2004, 17h08
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo