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 :

[firebird]procédure stockée et chaine csv


Sujet :

SQL Firebird

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut [firebird]procédure stockée et chaine csv
    Bonjour,

    Voici ma petite PS :

    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
    20
    21
    CREATE PROCEDURE VERIF_GENCODES (
        LISTE_GENCODES VARCHAR(144))
    RETURNS (
        NOUV_GEN VARCHAR(144),
        IDS_PROD VARCHAR(100))
    AS
    DECLARE VARIABLE ID_PROD VARCHAR(10);
     
    begin
      /* Procedure Text */
      IDS_PROD = '';
      for
        select distinct(ID_PRODGEN) from GENCODE where GENCODE  IN (:LISTE_GENCODES) into :ID_PROD
      do
      begin
        IDS_PROD = IDS_PROD || ID_PROD || ',';
     
      end
     
        suspend;
    end
    Ce que je voudrais qu'elle fasse:
    savoir à quel(s) produits correspondent la chaine csv de gencode par ex :
    '2134','5466','8764'
    (pour info mon champ gencode est un char(13) et non un entier, à ce propos je me demande d'ailleurs si c'est le mieux )

    le problème apparemment est le format du parametre d'entrée. Ce que je voudrais c'est que la requete soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct(ID_PRODGEN) from GENCODE where GENCODE  IN ('2134','5466','8764')
    Quel doit etre le format exact de mon parametre pour que celà s'exécute correctement? :

    Merci d'avance.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Dans le désordre :
    1/ je ne suis pas sûr à 100% mais je crois bien qu'un entier est moins gourmand qu'un char(x)

    2/ je pense qu'actuellement le paramètre d'entrée de ta requête est de la forme : Pourquoi ne pas effectuer des manipulations sur ce paramètre de manière à avoir une variable que tu puisses exploiter dans ta requête de la forme :
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse,

    l'entier est moins gourmand qu'un char(13) effectivement. mais dans le cas des ean13 peut-etre faut-il garder un 0012456 plutot qu'un 12456, à voir donc.

    Pour le problème de format:
    Meme en entrant '123','456','789'
    Firebird le met dans des apostrophes (''123','456','789'') donc ça ne marche pas

    Le seul moyen que j'ai trouvé (et que je voulais éviter) a été de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute statement 'select distinct(ID_PRODGEN) from GENCODE where GENCODE  IN (' || :LISTE_GENCODES ||')' into :ID_PROD
    Si quelqu'un a une autre méthode ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par rahan15
    Pour le problème de format:
    Meme en entrant '123','456','789'
    Firebird le met dans des apostrophes (''123','456','789'') donc ça ne marche pas
    Je pense que l'on ne s'est pas compris.
    J'imagine que ton paramètre d'entrée est de la forme '2134,5466,8764' et que tu veux utiliser dans la clause WHERE de ta requête : '2134','5466','8764'
    Si c'est effectivement ce que tu veux alors je te proposais d'ajouter 1 quote avant chaque virgule et 1 après chaque virgule.

    Actuellement comment invoques-tu la procédure stockée dont tu donnes le code dans ton 1er post ?
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Merci de ton temps,


    j'appelle la ps ainsi

    select IDS_PROD from VERIF_GENCODE ('AAA,BBB,CCC');

    Si je fais ce que tu me dis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* Procedure Text */ 
      IDS_PROD = ''; 
    LISTE_GENCODES = strreplace(LISTE_GENCODE,',',''',''');
      for 
        select distinct(ID_PRODGEN) from GENCODE where GENCODE  IN (:LISTE_GENCODES) into :ID_PROD 
      do 
      begin 
        IDS_PROD = IDS_PROD || ID_PROD || ','; 
     
      end 
     
        suspend;
    Ca ne marche pas ... je penseque les quotes créées sont "échappées".

    Apparemment cette requête semble être une requete dynamique donc execute statement est peut-etre la seule solution.

    Merci de ton aide en tous cas (j'en ai profité pour déclarer strreplace qui me facilite un peu la tache )

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Peut être que passer par les codes ASCII peut palier à "l'échappement" ?
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2012, 10h20
  2. Réponses: 0
    Dernier message: 23/12/2008, 12h07
  3. Oracle - Firebird, procédures stockées
    Par zorino dans le forum Oracle
    Réponses: 2
    Dernier message: 25/10/2006, 18h58
  4. Réponses: 2
    Dernier message: 21/12/2005, 16h23
  5. Réponses: 2
    Dernier message: 19/03/2005, 17h09

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