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 Firebird Discussion :

[FB1.5]Procédure stockée ?


Sujet :

SQL Firebird

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Par défaut [FB1.5]Procédure stockée ?
    Bonjour,

    Voici ma procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE PROCEDURE MA_PROCEDURE (
        NOMCHP VARCHAR(25)
        ID INTEGER)
    RETURNS (
        RETOUR VARCHAR(50))
    AS
    begin
        SELECT :NOMCHP from MA_VUE
        WHERE ID = :ID
        INTO :RETOUR;
      suspend;
    end
    Mon problème c'est que RETOUR ne prend pas la le résultat de la requete mais la valeur de mon paramètre :NOMCHP !
    Il y a t-il une solution ?

    Merci.

  2. #2
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    C'est normal sur le même principe vous avez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 1 from Matable into :RETOUR;
    Retour vous vous en doutez contiendra toujours 1.

    Mais j'imagine que ce que vous cherchez à faire est une requete dynamique. Avec en paramétre d'entrée le nom de la colonne a selectionner.

    Ce n'est hélas pas possible sous Interbase 6.
    Ce que vous pouvez faire :

    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
    CREATE PROCEDURE MA_PROCEDURE ( 
        NOMCHP VARCHAR(25), 
        ID INTEGER) 
    RETURNS ( 
        RETOUR VARCHAR(50)) 
    AS 
    begin 
      if (upper(NOMCHP)='NOM') then
        SELECT NOM from MA_VUE 
        WHERE ID = :ID 
        INTO :RETOUR; 
      else
      if (upper(NOMCHP)='PRENOM') then
        SELECT PRENOM from MA_VUE 
        WHERE ID = :ID 
        INTO :RETOUR; 
    ...
      suspend; 
    end
    Ce qui devient vite lourd quant on veut pouvoir selectionner beaucoup de colonne différentes.

    Sous Firebird on peux exécuter une requete créée dynamiquement.

    On construit la requete dans un varchar par exemple et on utilise execute statement, mais c'est une méthode qui n'est pas recommandée quand on peut faire autrement.. (Moins performant, plus difficile à maintenir, il n'y a plus de controle d'indépendance, la validation de la syntaxe se fait au moment de l'execution donc il y a plus de risque que ca plante, Il ya aussi un probleme avec les privilèges d'execution (c'est ceux de l'utilisateur qui sont pris en compte et non ceux de la procédure)).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute statement ' SELECT ' || NOMCHP || ' from MA_VUE where ID = ' || ID INTO :RETOUR;
    Donc priviligiez la première solution même si elle est plus longue à écrire.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Par défaut
    Merci pour la reponse. Cependant il m'est imossible d'utiliser la methode que vous préconisez, car, il y à une multitude de champs possibles. Dans tous les cas merci.

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. [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
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  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