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 :

Requête en fonction de plusieurs valeur s dans un IN


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut Requête en fonction de plusieurs valeur s dans un IN
    Bonjour,

    j'ai une requête que je dois faire tourné seulement dans une de mes conditions, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select t1.identifiant as identifiant
    from table1 t1
    where monchamps in ('valeur1','valeur2',.....)
    J'utilise sqldeveloper et toad et je sais que dans le In on ne peut mettre que 900 valeur maximum or je souhaite jouer ma requête avec plus de 3000 valeurs, y a t-il un moyen de faire cela ?

    Merci à vous

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Il faut utiliser une table temporaire, y stocker tes 3000 valeurs puis aller les chercher pour faire ton SELECT :
    https://asktom.oracle.com/pls/asktom...D:778625947169

  3. #3
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut
    Merci pour l'information, mais je n'ai pas assez de privilège pour cela, comment je pourrais faire ?

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Découper tes 3000 en groupes de 1000 et faire des UNION ALL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select t1.identifiant as identifiant from table1 t1 where monchamps in ('valeur1','valeur2',.....)
    union all select t1.identifiant as identifiant from table1 t1 where monchamps in ('valeur1001','valeur1002',.....)
    union all select t1.identifiant as identifiant from table1 t1 where monchamps in ('valeur2001','valeur2002',.....)

  5. #5
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Ah, pas bête

    Mais on ne risque pas de tomber sur une autre limite, à savoir la taille max d'un ordre SQL?
    https://docs.oracle.com/cd/E11882_01...t.htm#TTREF456
    : "Maximum length of SQL statement, including the NULL terminator : 409,600." Je crois que la limite est exprimée en bits donc ça ferait 51Ko soit 51 000 caractères.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Si vous exprimez la chaîne des valeurs en JSON, vous pouvez faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...where value in (
         select val from json_table(
             '["value1","value2", .... , "valueN"]'
             , '$[*]' COLUMNS( val VARCHAR2(4000) path '$') 
          )
    )
    (testé avec une string générée ["1","2",...,"100000"]' en SQLDeveloper)

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/07/2019, 09h14
  2. Réponses: 2
    Dernier message: 20/02/2014, 12h51
  3. Réponses: 1
    Dernier message: 22/10/2009, 14h34
  4. Fonction retournant plusieurs valeurs
    Par Trap D dans le forum Scheme
    Réponses: 1
    Dernier message: 17/02/2006, 21h52
  5. plusieurs valeur(s) dans l'url
    Par philippe123 dans le forum ASP
    Réponses: 6
    Dernier message: 04/08/2005, 09h08

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