Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2007, 09h18   #1
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 95
Points : 33
Points : 33
Par défaut [9i] Créer une séquence formatée (001, 002, etc)

Bonjour,

je voudrais savoir s'il est possible d'indiquer un format de données dans la déclaration d'une séquence (avec une concaténation ?) ?

Concrètement, je souhaiterai générer un identifiant qui donnerait automatiquement les valeurs suivantes :
0001
0002
0003
...

Et question complémentaire, est-ce possible d'y ajouter un préfixe, par exemple :
A0001
A0002
A0003 ?

Merci d'avance pour vos lumières !
chatroux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 09h37   #2
Membre éprouvé
 
Avatar de chrifo
 
Inscription : juillet 2006
Messages : 445
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 445
Points : 418
Points : 418
Bonjour,
Une séquence est :
Citation:
Envoyé par La doc oracle
a database object from which multiple users may generate unique integers
Vous ne pouvez donc faire ce que vous voulez dans la déclaration de la séquence. Ceci dit, votre besoin étant uniquement un format, sans aucun effet possible de concurrence, rien ne vous empêche de le traiter lors de l'appel à la séquence.
chrifo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h00   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Absolument:

Code :
1
2
 
SELECT To_Char( Ltrim( Sequence.NEXTVAL ), '000') FROM DUAL ;
Code :
1
2
 
SELECT 'A' || To_Char( Ltrim( Sequence.NEXTVAL ), '000') FROM DUAL ;
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h18   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
lpad plutôt non ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h25   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Non, ltrim pour supprimer les espaces superflus, c'est le to_char qui fait le lpad automatiquement grâce aux 0
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h28   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ha oui... alors le LTRIM est inutile sur la séquence si je ne m'abuse
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h38   #7
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 95
Points : 33
Points : 33
Merci beaucoup pour vos réponses.

Les 2 requêtes sont super ! Il reste un petit détail, un espace s'ajoute en début de la chaine générée :
001
002
C'est plus génant pour la 2ème requête, on obtient :
A 001
A 002

Une idée ?
chatroux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h40   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
pourtant LTRIM devrait régler ce problème

Eventuellement tu peux faire un REPLACE pour supprimer les espaces
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h55   #9
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Citation:
Envoyé par chatroux
un espace s'ajoute en début de la chaine générée
Quelle version d'Oracle ?
En 10gR1 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
10g CYRIL> r
  1   SELECT S2020.NEXTVAL, 'L' || LTRIM( TO_CHAR(S2020.NEXTVAL) )
  2*  FROM   DUAL
 
   NEXTVAL 'L'||LTRIM(TO_CHAR(S2020.NEXTVAL))
---------- -----------------------------------------
   1700397 L1700397
 
1 ligne sélectionnée.
 
10g CYRIL>  SELECT 'L' || LTRIM( TO_CHAR(S2020.NEXTVAL, '0000000') )
  2   FROM   DUAL;
 
'L'||LTRI
---------
L1700401
 
1 ligne sélectionnée.
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h56   #10
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 95
Points : 33
Points : 33
Youpi j'ai trouvé!

LTRIM n'était pas placé au bon endroit. Pour enlever l'espace en début de chaine, il faut modifier ces 2 requêtes de cette façon:

Code :
SELECT ltrim(to_char(ma_sequence.NEXTVAL, '000')) FROM DUAL;
Code :
SELECT 'A' || ltrim(to_char(ma_sequence.NEXTVAL, '000')) FROM DUAL;
Merci beaucoup pour votre aide
(c'est vraiment puissant ce qu'on peut faire avec seulement qques instructions!)
chatroux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 10h59   #11
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 95
Points : 33
Points : 33
Citation:
Envoyé par Magnus
Quelle version d'Oracle ?
J'aurais du préciser... j'ai oracle 9i.
Merci
chatroux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h47.


 
 
 
 
Partenaires

Hébergement Web