[db2] équivalent des séquences d'Oracle ?

équivalent des séquences d'Oracle ? [db2] - SQL/NoSQL - Programmation

Marsh Posté le 26-08-2003 à 15:33:38    

Salut,  
 
à priori, il n'existe pas d'équivalent pour DB2 des séquences d'Oracle ou Postgresql.  
Me-trompe-je ?
 
Dans ce cas, comment faites-vous pour gérer une incrémentation automatique sur une clef par exemple ?
 
Merci de votre aide.
Nestor.

Reply

Marsh Posté le 26-08-2003 à 15:33:38   

Reply

Marsh Posté le 26-08-2003 à 15:56:02    

Quel version de db2?
Si ta version est inférieur à la 7.2 c'est à la main et c'est vraiment la merdasse :). Bon tu peux toujours faire des trucs comme ça:

Code :
  1. insert into tatable select coalesce(max(id)+1,0), ... tes autres champs from tatable)


cela marche bien a condition que id soit ta primary key ou qu'il y ait un index unique dessus.

Reply

Marsh Posté le 26-08-2003 à 15:58:31    

Et si c'est une version supérieure à la 7.2, il y a une solution plus propre ?

Reply

Marsh Posté le 26-08-2003 à 16:00:47    

Parce que sinon j'ai trouvé çà

Code :
  1. CREATE TABLE Table_1(
  2. "CompteurAuto"   INTEGER                   PRIMARY KEY         GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1, NO CACHE),


 
mais je ne sais pas comment l'utiliser : faut-il faire un select compteurAuto avant l'insertion ou on fait une insertion directement (mais dans ce cas, avec quelle valeur ?) ?
 

Reply

Marsh Posté le 26-08-2003 à 16:09:05    

non tu précises pas ta colonne lors de l'insertion un peu comme sous mysql. Mais utilises plutot By default que always.
 
Attention fait des tests parce que si tu fais des insertions à la main en précisant ton id, l'autoincrementeur(si ça existe comme mot) n'en tient pas compte...
Exemple:

Code :
  1. Une table T1 : I INT GENERATED By DEFAULT AS IDENTITY, J INT
  2. INSERT INTO T1(j) VALUES(5)
  3. INSERT INTO T1(J) VALUES(10)
  4. SELECT * FROM T1
  5. I J
  6. -------
  7. 1 5
  8. 2 10
  9. INSERT INTO T1 values(3,15)
  10. SELECT * FROM T1
  11. I J
  12. -------
  13. 1 5
  14. 2 10
  15. 3 15
  16. INSERT INTO T1(J) VALUES(20)
  17. SELECT * FROM T1
  18. I J
  19. -------
  20. 1 5
  21. 2 10
  22. 3 15
  23. 3 20


(exemple tiré de dbforums j'ai la flemme cet aprem ;) )

Reply

Marsh Posté le 27-08-2003 à 08:09:15    

ok ça marche sur ma version Db2.
Mais je m'interroge : comment je fais pour récupérer la valeur du numéro que je viens de générer ? (dans le cas où il y a des insertions quasi simultanées)


Message édité par Nestor le 27-08-2003 à 09:16:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed