|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Inscription : mai 2005 Messages : 596 ![]() |
Bonjour, je me pose la question suivante j'aimerais pouvoir effectuer une centaine d'insertion de données. L'ensemble de mes insert porte sur une même table et seulement différencier par l'identifiant de la ligne. Je peux effectuer mes insertions en utilisant des boucles PL, mais quelqu'un connaitrait-il un moyen de générer un compteur (?) me ramenant un nombre n de ligne pour que je puisse écrire une insertion du type :
insert into ma_table (id,label) select cpteur , 'toto from compteur ... |
|
|
00
|
|
|
#2 | ||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
salut ,
Tu peux faire une boucle et la dans tu mets Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : mai 2005 Messages : 596 ![]() |
Effectivement il est possible faire une boucle PL mais ma question est tout autre : est il possible de générer n ligne en sortie d'une requête pour avoir un compteur (Je veux bien sûr considérer une solution propre et non pas récupérer le rownum d'une table quelconque...)
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Expert Datawarehouses + BO (sur BDD Oracle et SQL Server) Inscription : mars 2003 Messages : 645 ![]() |
et ça ?
SQL: [Oracle 10g] renumérotez les records d'une table sans la multiplication x 10. (réponse d'origine donnée par sqlpro) edit: sinon il faut utiliser une séquence. |
|
|
00
|
|
|
#5 | ||
|
Membre éclairé
![]() Inscription : mai 2005 Messages : 596 ![]() |
Je n'ai pas oracle sous la main, je ferais un test demain. Mais a priori ce type de requete peux me permettre de simuler un rownum à partir d'une table lambda... Cela ne répond pas vraiment à ma question : je pourrais plus simplement me servir du rownum et effectuer une requete que je sais volumineuse en générant un ou deux produits cartésien suivant le nombre n de lignes désiré :
Code :
|
||
|
|
00
|
|
|
#6 | ||||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
Salut,
Désolé pour ma première réponse, mais maintenant j'ai bien compris ton problème. Essaie ce code, ca marche trés bien a partir de la version 9i Code :
Code :
|
||||
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : mai 2005 Messages : 596 ![]() |
wow! parfait je ne pensais pas que c'était réalisable mais effectivement cela répond à mon besoin.
Merci encore |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Je croyais que tu voulais une solution sans rownum
Une autre solution sans rownum : http://www.developpez.net/forums/sho...23&postcount=8
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#9 | ||
|
Membre éclairé
![]() Inscription : mai 2005 Messages : 596 ![]() |
Non ce que je précisais, c'était que je ne voulais pas générer un compteur basé sur un select sur une table lambda dont je ne sais pas à priori combien de ligne elle possède et en jouant ensuite avec le rownum...
Par exemple : Code :
|
||
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 2 ![]() |
une solution plus simple sans passer par les tables sans passer par rownum :
select level from (select 1 from dual) connect by level<=:n |
|
|
00
|
|
|
#11 | ||||||
|
Membre émérite
![]() Inscription : janvier 2004 Messages : 845 ![]() |
Salut,
je ne pense pas que se soit exactement la solution recherchée, mais perso j'utilise une petite fonction PL/SQL qui me ramène un tableau de nombre que je peux référencer en tant que table... l'avantage est que je donne 2 paramètres à ma fonction, de manière à ne pas forcément avoir un tableau de 1 à n mais de x à y, sans forcément débuter à 1 le type de tableau Code :
CREATE OR REPLACE Type nTabType IS TABLE of Number ; Code :
Code :
Code :
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse ! Yorglaa |
||||||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 2 ![]() |
select * from (
select level+: x-1 num from (select 1 from dual) connect by level<=:y-: x+1 ) pour : x=11 et y =16 Num ---- 11 12 13 14 15 16 |
|
|
00
|
|
|
#13 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
http://www.developpez.net/forums/sho...5&postcount=16
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
|
|
#14 | |
|
Membre émérite
![]() Inscription : janvier 2004 Messages : 845 ![]() |
Citation:
toutefois ce qui me plait dans ma solution c'est qu'il s'agit d'un objet compilé, donc réutilisable dans plein de contextes sans avoir ajouter des sous select à toutes les sauces... de plus, pour les version inférieures à 10g, l'utilisation intensive de la table dual se traduit tout de même par des IO supplémentaire puisqu'il s'agit (encore) d'une table physique.
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse ! Yorglaa |
|
|
|
00
|
|
|
#15 |
|
Membre éclairé
![]() Inscription : mai 2005 Messages : 596 ![]() |
Merci fidodido, la solution que tu proposes est vraiment intéressante et semble nettement plus performante que l'utilisation du regroupement par cube() qui suivant le niveau de récursion devient rapidement non performant. Effectivement la syntaxe ne s'applique pas à toutes les versions d'Oracle (pas de prob. pour moi je suis en 10g), mais cette requête reste vraiment séduisante.
Merci Yorglaa ta solution a au moins le mérite de montrer comment renvoyer le contenu de tableau comme étant un résultat de table. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com