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

Transformer une variable avec séparateur en SELECT IN


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut Transformer une variable avec séparateur en SELECT IN
    Bonjour,

    Je dois récupérer des libellés d'erreurs fonctionnelles dans une table à l'aide de codes pouvant être concaténés dans une variable avec le ? comme séparateur.
    Je voudrais savoir comment faire une requête pour lire chacun des libellés des codes contenus dans la variable ?

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    avec code_err='ERR01?ERR02'
     
    -- il faudrait renvoyer un résultat équivalent à la requête
    SELECT libelle
    FROM table
    WHERE code IN ( 'ERR01','ERR02')

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Varying in lists...
    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
    22
    23
    24
    25
    SQL>   with var as (
      2  select 'ERR01?ERR02' as code from dual
      3  ),
      4         var2 as (
      5  select '?'||code||'?' as code from var
      6  ),
      7         explode as (
      8   select trim( substr (code,
      9                       instr (code, '?', 1, level  ) + 1,
     10                       instr (code, '?', 1, level+1)
     11                       - instr (code, '?', 1, level) -1 )
     12             ) as token
     13     from var2
     14  connect by level <= length(code)-length(replace(code,'?',''))+1
     15  )
     16  select * from explode;
     
    TOKEN
    ----------------------------------------------------
    ERR01
    ERR02
     
     
     
    SQL>
    Vous pouvez alors utiliser un IN

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    OK merci.
    Ca marche bien mais je ne comprends pas pourquoi ca ajoute 2 lignes en plus

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    C'est à cause de ma concaténation dans var2 (length(code) est 2 caractères trop grand), on peut l'écrire comme ça :
    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
    SQL>   WITH var AS (
      2  SELECT 'ERR01?ERR02' AS code FROM dual
      3  ),
      4         explode AS (
      5  SELECT trim( substr ('?'||code||'?',
      6                       instr ('?'||code||'?', '?', 1, level  ) + 1,
      7                       instr ('?'||code||'?', '?', 1, level+1)
      8                       - instr ('?'||code||'?', '?', 1, level) -1 )
      9              ) AS token
     10    FROM var
     11  connect BY level <= length(code)-length(REPLACE(code,'?',''))+1
     12  )
     13  SELECT * from explode;
     
    TOKEN
    ----------------------------------------------------
    ERR01
    ERR02
     
    SQL>
    Ou alors faire length(code) - 2 puisqu'on a ajouté 2 caractères arbitrairement.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Ah oui
    C'est parfait.
    Merci

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

Discussions similaires

  1. decoupage d'une variable avec séparateur
    Par vince2005 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 17/03/2014, 19h21
  2. [Variable] Déclarer une variable avec un nom dynamique
    Par jacquesh dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/02/2006, 14h11
  3. Utilisation d'une variable avec l'instruction 'USE'
    Par florantanplan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/11/2005, 10h39
  4. [DEBUTANT] Transformer une variable Double en STring
    Par Battosaiii dans le forum Langage
    Réponses: 6
    Dernier message: 13/06/2005, 16h43
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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