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 :

[Procédure Stockée] Paramétrage dynamique


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 32
    Points : 32
    Points
    32
    Par défaut [Procédure Stockée] Paramétrage dynamique
    Bonjour bonjour ^^

    J'ouvre ce topic plus à titre informatif que pour répondre à un problème technique.

    Après quelques recherches sur le net, il semblerait qu'il ne soit pas possible de définir dynamiquement une liste de paramètres pour une procédure stockée.
    Je m'explique : dans un cas d'utilisation où il serait pratique de sélectionner une ou plusieurs valeurs possibles pour une sélection, comment faudrait-il s'y prendre pour paramétrer une procédure stockée en fonction de cette liste ?
    Il existe plusieurs méthodes d'après ce que j'ai pu voir mais principalement, c'est basé sur l'utilisation de CONCAT pour construire la requête dans la procédure, et concaténer, par exemple, l'argument donné dans une clause "champ IN (..., ..., ...)"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SET @query = CONCAT("SELECT *
    FROM table1
    WHERE champ1 IN (", "1, 2, 3", ")";
    PREPARE stmt FROM @query;
    EXECUTE stmt ;
    Sauf que voila, je suis pas très fan de ce genre de solution "bricolo" :/ Et je me demandait s'il n'existait pas une meilleure solution à ce problème ?

    Ce qui ouvre plusieurs questions :
    - Est-ce qu'il s'agit d'un défaut de conception de MySQL connu ? Est-ce qu'il est possible de faire ça avec d'autres SGBD ?
    - Ou bien, est-ce que je me fourvoie et mon approche du problème n'est pas correcte ? Dans le sens où si c'est pas faisable, c'est parce qu'il existe une autre manière de faire ou que, conceptuellement parlant, ce n'est pas une bonne méthode
    - Ou bien, je me trompe dans mon raisonnement et utiliser CONCAT est une bonne méthode, largement répandue ?

    Merci pour votre aide, amis développeurs

    PS: Je travaille avec PHPMyAdmin

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Tu rencontreras cette limite avec la majorité des SGBD.
    Si tu ne veux pas construire dynamiquement ta requête, il existe une autre méthode qui utilise une table temporaire avec une seule colonne.
    Tu enregistres les valeurs de ta liste dans la table temporaire (une valeur par ligne) et tu exécutes ta requête en effectuant une jointure sur cette table temporaire ou avec un IN (SELECT valeur FROM table_tempo).
    Une fois la requête exécutée, tu peux vider la table temporaire.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Hmmm ok je vois. Merci pour cette réponse ^^
    Vu l'utilisation que je vais en faire, je pense que je vais passer par une Vue et construire ma requête en PHP.

    C'est étonnant tout de même que ce genre de chose ne soit pas prise en charge, il doit surement y avoir une bonne raison...

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

Discussions similaires

  1. Procédure Stockée pour créer des TABLE dynamiquement
    Par GuyverZ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/05/2009, 22h29
  2. Réponses: 4
    Dernier message: 03/05/2009, 19h52
  3. procédures stockées dynamiques
    Par Chucky69 dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 30/12/2005, 18h51
  4. SQL dynamique dans une procédure stockée
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2005, 15h17
  5. [FB1.5]Création dynamique d'une procédure stockée ?
    Par Sitting Bull dans le forum SQL
    Réponses: 3
    Dernier message: 10/12/2004, 14h44

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