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?
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?
euh ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part select sequence.nextval Borne_inf , sequence.currval +100 Borne_Sup from dual;
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
Je dirais plutôt sequence.currval +(100 x l'incrément) si l'incrément est différent de 1.
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) )
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.
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.
Gille
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
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
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
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
Partager