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

MySQL Discussion :

Procédures stockées et Conditions IF


Sujet :

MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Procédures stockées et Conditions IF
    Bonjour,

    lors de la création de procédures stockées je rencontre un problème, je vous explique le code simplifié suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE PROCEDURE ajouter_document (authorName VARCHAR(64), authorSurname VARCHAR(64))
    BEGIN
    SELECT COUNT(*) AS nbrAuteurs FROM auteurs WHERE nomAuteur = authorName AND prenomAuteur = authorSurname;
    IF nbrAuteurs < 1 THEN
    	CALL ajouter_auteur(authorName, authorSurname);
    	SELECT idAuteur AS nbrAuteurs FROM auteurs WHERE nomAuteur = authorName AND prenomAuteur = authorSurname;
    ELSE
    	SELECT idAuteur AS nbrAuteurs FROM auteurs WHERE nomAuteur = authorName AND prenomAuteur = authorSurname;
    END IF
    ....
    Je souhaite donc simplement:
    Je compte le nombre d'entrées correspondantes à mon filtre (nom et prénom de l'auteur)
    Si ce nombre d'entrées est inférieur à 1 alors je crée un auteur dans la table auteur (via procédure ajouter_auteur), et je sélectionne la clé primaire de la nouvelle entrée
    Si ce nombre est supérieur à 1 (voir même égal à 1, je vais créer une règle UNIQUE dans les tables sur certaines entrées), je sélectionne la clé primaire de cette entrée

    Le problème c'est que cela ne fonctionne pas, et je n'ai pas su trouver d'aide à l'heure actuelle. Je suppose que mon problème vient de ma variable nbrAuteur qui devrait contenir un entier mais qui n'en contient pas dans l'état actuel des choses.

    Si vous avez une piste à m'offrir, je suis preneur Merci

    Cordialement.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Bon après retournement de méninges j'ai pondu un code loin d'être parfait mais qui rempli son office:

    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
    18
    19
     
    DELIMITER $$
    CREATE PROCEDURE ajouter_document(title varchar(128), codeCat varchar(64), authorName varchar(64), authorSurname varchar(64), themeName varchar(64), keyWordName varchar(32))
    BEGIN
    IF ((SELECT COUNT(*) FROM auteurs WHERE nomAuteur = authorName AND prenomAuteur = authorSurname) < 1) THEN
    	CALL ajouter_auteur(authorName, authorSurname);
    END IF;
    IF ((SELECT COUNT(*) FROM themes WHERE nomTheme = themeName) < 1) THEN
    	CALL ajouter_theme(themeName);
    END IF;
    IF ((SELECT COUNT(*) FROM motsCles WHERE nomMotCle = keyWordName) < 1) THEN
    	CALL ajouter_motcle(keyWordName);
    END IF;
    INSERT INTO documents (codeCatalogue, titre) VALUES (codeCat, title);
    INSERT INTO realiser (idDocument, idAuteur) VALUES ((SELECT idDocument FROM documents WHERE codeCatalogue = codeCat AND titre = title), (SELECT idAuteur FROM auteurs WHERE  nomAuteur = authorName AND prenomAuteur = authorSurname));
    INSERT INTO etreDedie (idDocument, idTheme) VALUES ((SELECT idDocument FROM documents WHERE codeCatalogue = codeCat AND titre = title), (SELECT idTheme FROM themes WHERE nomTheme = themeName));
    INSERT INTO contenir (idDocument, idMotCle) VALUES ((SELECT idDocument FROM documents WHERE codeCatalogue = codeCat AND titre = title), (SELECT idMotCle FROM motsCles WHERE nomMotCle = keyWordName));
    END$$
    DELIMITER ;
    Sachant qu'ici on a ma procédure complète Elle n'est certainement pas parfaite et si vous avez des améliorations à apporter n'hésitez pas

    Cordialement

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    Avec un INSERT... ON DUPLICATE KEY UPDATE ?

Discussions similaires

  1. Procédure stockée avec condition IF
    Par adrix26 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/02/2011, 17h54
  2. procédure stockée : condition et résultat au format xml
    Par julien.63 dans le forum Développement
    Réponses: 3
    Dernier message: 13/04/2010, 13h05
  3. Réponses: 1
    Dernier message: 27/09/2009, 16h55
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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