Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1639 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  récupérer une liste de séquence avec un select

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

récupérer une liste de séquence avec un select

n°1708327
basketor63
LFI et le PC ne sont pas d'EG
Posté le 26-03-2008 à 19:04:37  profilanswer
 

salut, je voudrais pouvoir récupérer une liste de séquences avec un select  
 
SELECT NEXTVAL FOR ma_sequence FROM SYSIBM.SYSDUMMY1 fetch first 100 rows only
 
alors ça ça renvoie un résultat, la table sysdummy1 c'est léquivalent de la table dual de oracle
 
donc je le fais avec une autre table systeme à db2, et ça marche, mais je me demande si il y a pas un table équivalente à DUAL mais infinie par exemple donc la seule limite serait le fetch first X rows only

mood
Publicité
Posté le 26-03-2008 à 19:04:37  profilanswer
 

n°1709023
MagicBuzz
Posté le 28-03-2008 à 02:44:25  profilanswer
 

n'importe laquelle de tes tables à toi qui contient beaucoup des lignes [:spamafote]

n°1709108
basketor63
LFI et le PC ne sont pas d'EG
Posté le 28-03-2008 à 10:04:15  profilanswer
 

ouais, mais c'est pas 100% fiable [:spamafote]

 

sinon la solution c'était de récupérer les séquences avec le select qui servais à ramener les lignes à insérer par la suite, j'aidais un collègue qu'était pas très réveillé, dixit lui même :o


Message édité par basketor63 le 28-03-2008 à 10:06:09
n°1709141
casimimir
Posté le 28-03-2008 à 11:16:33  profilanswer
 

en db2 je ne sais mais il doit y avoir moyen de s'insipirer de la méthode via connect by d'oracle
 

Code :
  1. select rn
  2. from
  3. (select rownum rn
  4. from dual connect by rownum<=10)

n°1709155
basketor63
LFI et le PC ne sont pas d'EG
Posté le 28-03-2008 à 11:47:46  profilanswer
 

casimimir a écrit :

en db2 je ne sais mais il doit y avoir moyen de s'insipirer de la méthode via connect by d'oracle
 

Code :
  1. select rn
  2. from
  3. (select rownum rn
  4. from dual connect by rownum<=10)



 
ok en récursif sans doute
il y a moyen mais il faut deux select et union all, c'est pas aussi clair que dans oracle comme souvent dans db2 :/
 
d'ailleurs pour les rowids sous db2
 

Citation :

To use a Rowid in DB2, a column must be created on a table using the Rowid datatype.


 
encore un truc lourd ...

n°1709353
MythoGK
The sun always shines on TV...
Posté le 28-03-2008 à 15:55:07  profilanswer
 

basketor63 a écrit :

salut, je voudrais pouvoir récupérer une liste de séquences avec un select  
SELECT NEXTVAL FOR ma_sequence FROM SYSIBM.SYSDUMMY1 fetch first 100 rows only


 
Petite proposition pour retourner 100 valeurs de séquences :
 

Code :
  1. WITH COMPTEUR(ITERATION)
  2. AS
  3. (
  4. SELECT 1
  5. FROM SYSIBM.SYSDUMMY1
  6. UNION ALL
  7. SELECT ITERATION + 1
  8. FROM COMPTEUR
  9. WHERE ITERATION < 100
  10. )
  11. SELECT NEXTVAL FOR ma_sequence
  12. FROM COMPTEUR;


 
Il faut générer une suite de 1 à n (100 dans cet exemple) en mode récursif (DB2 génère automatiquement une table TEMP).
 
Certes ce n'est pas super intuitif, c'est du DB2, c'est comme le TRUNCATE sous Oracle qui devient un vulgaire "ALTER TABLE xxx ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE" sous DB2 :pt1cable:


---------------
Today has been a fucked up day...
n°1709407
basketor63
LFI et le PC ne sont pas d'EG
Posté le 28-03-2008 à 17:16:26  profilanswer
 

laul, bien joué, j'ai pas eu le courage de le faire d'ailleurs [:rofl]

 

et sinon la methode recursive made in db2, je m'en servais pour rétablir l'intégrité des tables apres une desactivation d'intégritée
car ça mettais toutes les tables dépendantes par contraintes en mode "check pending"

 
Code :
  1. SET INTEGRITY FOR UNE_TABLE OFF@
  2. BLABLABLA
  3. COMMIT@
  4. create procedure maj_integrite_dep_PCOSOC ( )
  5. integrite_proc: begin
  6. declare listeTable VARCHAR(5000);
  7. declare req VARCHAR(5000);
  8. set listeTable = '';
  9. for table_row as
  10.  cur cursor with hold for
  11.   WITH n(id) AS
  12.          (   
  13.    SELECT reftabname
  14.    FROM  syscat.references
  15.    WHERE reftabname = 'UNE_TABLE'
  16.    UNION ALL
  17.      SELECT nplus1.tabname
  18.    FROM syscat.references as nplus1, n
  19.    WHERE n.id = nplus1.reftabname
  20.   )
  21.   SELECT distinct id FROM n where id !='UNE_TABLE'
  22. do
  23.  set listeTable = listeTable || table_row.id || ',';
  24. end for;
  25. set req = 'SET INTEGRITY FOR UNE_TABLE IMMEDIATE CHECKED FORCE GENERATED';
  26. prepare s0 from req;
  27. execute s0;
  28. if (length(listeTable) > 0) then
  29.  set listeTable = left(listeTable, length(listeTable)-1);
  30.  set req = 'SET INTEGRITY FOR ' || listeTable || ' IMMEDIATE CHECKED';
  31.  prepare s1 from req;
  32.  execute s1;
  33. end if;
  34. commit;
  35. end integrite_proc@
 

et encore j'ai pas poussé jusqu'a metre la table en question en parametre ...


Message édité par basketor63 le 28-03-2008 à 17:21:39

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  récupérer une liste de séquence avec un select

 

Sujets relatifs
Recuperer le texte d'un document word .doc en phpComment puis-je ordonner une liste de résultat?
<select>In love des listes déroulantes
récupérer contenur fichier XML serveur externeDifférence entre FF et IE : Liste
[HTML][JS] Changement d'image dans un <select>Besoin d'aide : récupérer les tags d'un fichier avec php
[PHP] résolu - impossible de recupérer les $_POST[Excel+VBA]Liste déroulante associée à une autre liste déroulante !
Plus de sujets relatifs à : récupérer une liste de séquence avec un select


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR