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

Administration Oracle Discussion :

Récupérer les 100 prochaines valeures d'une Séquence en une seule requête


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut Récupérer les 100 prochaines valeures d'une Séquence en une seule requête
    Bonjour,

    Existe t'il en un moyen en Oracle 10g pour récupérer en une seule requête les 100 prochaines valeures d'une séquence?

  2. #2
    Invité
    Invité(e)
    Par défaut
    euh ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sequence.nextval Borne_inf , sequence.currval +100 Borne_Sup from dual;

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut
    Le pb avec cette solution c'est que après exécution de cette requête on n'a pas le nextval = currval + 100 +1

    J'aimerais qu'en une seule requête je réserve réellement les 100 prochaines valeures de la séquence

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par farenheiit Voir le message
    Le pb avec cette solution c'est que après exécution de cette requête on n'a pas le nextval = currval + 100 +1

    J'aimerais qu'en une seule requête je réserve réellement les 100 prochaines valeurs de la séquence
    C'est un autre problème ça !!!
    Je crois qu'il faut modifier le cache-size de la séquence pour se faire.

  5. #5
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    Je dirais plutôt sequence.currval +(100 x l'incrément) si l'incrément est différent de 1.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut
    voici la vraie solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT toto.nextval FROM (
    SELECT x, s FROM DUAL
    MODEL 
      DIMENSION BY (1 AS x) MEASURES (1 AS s)
      RULES ITERATE (100) 
     ( s[ITERATION_NUMBER] =1)
    )

  7. #7
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    select s.nextval from dual connect by level <= 100;

    Mais ce n'est pas forcément une bonne idée (performances) ou alors augmenter de cache de la sequence.

    Sinon, créer la sequence avec un 'increment by 100' . Ou alors tous les programmes qui utilisent la sequence font x100. Quel est le but de celà ?

    Cordialement,
    Franck.

  8. #8
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par pachot Voir le message
    Quel est le but de celà ?
    Même question !!
    Parce que si ça se trouve, tout le monde rivalise de requêtes carabinées inutilement.

  9. #9
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut
    Voilà une réponse qui incrémente effectivement la séquence. Les unions servent à générer une table qui contient les nombres de 0 à 9, en l'auto-joignant on obtient 100 valeurs.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select dizaines.n * 10 + unites.n as compte, seq.nextval from 
    (select 0 as n from dual union select 1 from dual union select 2 from dual union select 3 from dual union select 4 from dual union select 5 from dual union select 6 from dual union select 7 from dual union select 7 from dual union select 9 from dual) dizaines, 
    (select 0 as n from dual union select 1 from dual union select 2 from dual union select 3 from dual union select 4 from dual union select 5 from dual union select 6 from dual union select 7 from dual union select 7 from dual union select 9 from dual) unites
    Gille

  10. #10
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Ouais enfin toutes ces requêtes imposent qu'il n'y a pas de cache sur la séquence ce qui n'est pas forcément judicieux

  11. #11
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut
    Citation Envoyé par orafrance Voir le message
    Ouais enfin toutes ces requêtes imposent qu'il n'y a pas de cache sur la séquence ce qui n'est pas forcément judicieux
    Je ne vois pas bien le rapport avec la taille du cache de séquence. Le cache n'a une influence visible qu'en cas de panne et reprise (perte de certains numéros) ou d'import/export. Par contre il est certain qu'un accès concurrent à la séquence par un autre processus va poser problème et créer des sauts dans la réponses.

    Cordialement
    Gilles

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Par défaut Sequence & performance
    Bonjour,

    Bien sur que le cache a un impact sur la performance. Si tu as un cache de 50, Oracle met les 50 prochaine valeurs en mémoire et donc ira lire les nouvelles valeurs en mémoire. Alors que si cache de 0, chaque nouvelle valeur de séquence fera l'objet d'un accès disque. Et comme tout le monde le sait, un accès disque est plus couteux qu'un accès mémoire.

    Laurent

  13. #13
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut
    Citation Envoyé par lallio Voir le message
    Bien sur que le cache a un impact sur la performance. Si tu as un cache de 50, Oracle met les 50 prochaine valeurs en mémoire et donc ira lire les nouvelles valeurs en mémoire. Alors que si cache de 0, chaque nouvelle valeur de séquence fera l'objet d'un accès disque. Et comme tout le monde le sait, un accès disque est plus couteux qu'un accès mémoire.
    Tout à fait d'accord. Mais la question n'était pas la performance mais "comment faire". En l'occurrence, le cache n'a pas d'influence sur la sémantique (le résultat) des opérations, sauf en cas de panne.

    Ceci dit, comme cela a déjà été mentionné, il faudrait connaitre le pourquoi de cette question. Comme le soulignent plusieurs guides et manuels, les séquences ne devraient pas être utilisées pour tenter de générer des suite de nombres "sans trous".

    Gilles

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35

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