IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Incrémentation d'une variable alphanumérique [10gR2]


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut Incrémentation d'une variable alphanumérique
    Bonjour,

    Mon besoin est le suivant , j'ai une colonne dans une table qui a le format varchar.
    select max(code) from test_table, le résultat est A850.

    je veux une requete de la forme suivante qui m'affiche A851.
    en fait elle incrémente la valeur max de la colonne dans la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select xxx(max(code) from test_table
    Merci d'avance
    Demain n'est plus à attendre mais à inventer !!!

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Que vient faire la lettre dans un numéro censé s'incrémenter ?

    Il faudrait que vous sépariez votre colonne en deux : la lettre et le nombre.

    Si ce n'est pas possible, il faut définir la partie numérique de votre chaîne, l'extraire, la transformer en nombre, l'incrémenter, la transformer en chaîne et remettre le reste du code.

    Bref, c'est mal modélisé.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Que vient faire la lettre dans un numéro censé s'incrémenter ?

    Il faudrait que vous sépariez votre colonne en deux : la lettre et le nombre.

    Si ce n'est pas possible, il faut définir la partie numérique de votre chaîne, l'extraire, la transformer en nombre, l'incrémenter, la transformer en chaîne et remettre le reste du code.

    Bref, c'est mal modélisé.
    actuellement l'incrémentation alphanumérique se fait à travers un script shell qui incrémente et insère un enregistrement dans la table en question.

    je sais que c'est mal modélisé mais je cherche une solution de contournement qui répond à mon besoin.
    Demain n'est plus à attendre mais à inventer !!!

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    J'ai trouvé une première solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select (replace(substr(dump('A850'),instr(dump('A850'),': ')+2),',')+1) from dual;
    le résultat est en ascii :

    65565349

    Mais comment convertir de l'ascii vers string ?

    Merci
    Demain n'est plus à attendre mais à inventer !!!

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Comment est construite ta chaîne ? Y a-t-il toujours un unique caractère alpha en première position ? Le nombre qui suit peut dépasser les 1000 ?

    Quoi qu'il en soit, tu peux bricoler ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT substr(c, 1, 1) || (regexp_replace(c, '[[:alpha:]]') + 1) 
    FROM (SELECT 'A850' c 
          FROM dual)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Salut,

    Comment est construite ta chaîne ? Y a-t-il toujours un unique caractère alpha en première position ? Le nombre qui suit peut dépasser les 1000 ?

    Quoi qu'il en soit, tu peux bricoler ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT substr(c, 1, 1) || (regexp_replace(c, '[[:alpha:]]') + 1) 
    FROM (SELECT 'A850' c 
          FROM dual)
    Merci Pacman.

    Juste une précision , le champ est sur 4 digits.

    comment l'incrémenter en hexadécimal ? si possible merci.
    Demain n'est plus à attendre mais à inventer !!!

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Si c'est de l'hexadécimal, c'est un peu plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select to_char(to_number('A850', 'xxxx') + 1 , 'xxxx') as inc
      from dual;
     
     INC
    ---- 
    A851

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Si c'est de l'hexadécimal, c'est un peu plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select to_char(to_number('A850', 'xxxx') + 1 , 'xxxx') as inc
      from dual;
     
     INC
    ---- 
    A851
    Merci Waldar

    le résultat est a851

    Est ce que c'est possible de garder le a en majiscule ?

    Merci d'avance.
    Demain n'est plus à attendre mais à inventer !!!

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Oui, mettez des X majuscules dans le format au lieu des minuscules.

    Par contre, je me permets de vous faire remarquer que si vous aviez précisé dès votre premier message qu'il s'agissait d'hexadécimal vous auriez eu la solution plus rapidement.

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Oui, mettez des X majuscules dans le format au lieu des minuscules.

    Par contre, je me permets de vous faire remarquer que si vous aviez précisé dès votre premier message qu'il s'agissait d'hexadécimal vous auriez eu la solution plus rapidement.
    Oui tu as raison Waldar.

    Quoi dire merci infiniment et bonne journée.
    Demain n'est plus à attendre mais à inventer !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Prob d'incrémentation d'une variable que j'extrait d'une table
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/04/2007, 14h24
  2. [XSLT] Incrémentation d'une variable
    Par Oberown dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 03/10/2006, 18h03
  3. incrémentation d'une variable
    Par dorian2031 dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2006, 16h13
  4. [Tableaux] Incrémentation d'une variable
    Par cisse18 dans le forum Langage
    Réponses: 46
    Dernier message: 19/07/2006, 17h02
  5. [Débutant] Probleme d'incrémentation d'une variable
    Par sakuragikan dans le forum ASP
    Réponses: 2
    Dernier message: 25/08/2005, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo