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

PL/SQL Oracle Discussion :

Increment ID (Varchar.!)


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant Décisionnel
    Inscrit en
    Janvier 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 128
    Points : 84
    Points
    84
    Par défaut Increment ID (Varchar.!)
    Bonjour à tous,

    Petite question pure SQL

    J'ai du code avec des cursor partout..! Et ceci peuvent être remplacés par des case when et d'autre choses plus performantes.


    Cependant je me pose la question sur l'incrémentation d'un champs,
    je sais qu'il existe un auto incrément, mais dans mon cas ça n'irait pas.

    Car l'id n'est pas un NUMBER mais un varchar (Me demandais pas pk! ) ex : FIC0000000000000020135
    Et qu'il est définie de cette manière :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         select   max(P_ID)
         INTO    V_P_NUM 
         from    P
         where  P_ID like 'FIC%';
       
    
    Cursor..
    
    V_P_NUM := V_P_NUM + 1;
    V_P_ID := substr('FIC000000000000000000000000000', 1, 30 - length(to_char(V_P_NUM))) || to_char(V_P_NUM);
    
    End cursor
    Comment je peux créer cette incrémentation sans le curseur?

    Merci d'avance!

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Il y a un peu de confusion dans vos propos sur la notion de curseur ainsi que sur les gain en performance.
    Pour revenir sur le problème de l'incrémentation: l'algorithme que vous analysez ne fonctionne correctement que en mode mono-utilisateur (peut être un batch) ou si quelque chose quelque part est verrouillé pour interdire à deux utilisateur de calculer la nouvelle valeur en même temps (personnellement je doute que c'est le cas sinon une autre solution aura été envisagé).
    La solution (mauvaise mais on fait avec le moyen du bord) sera d'utiliser une séquence initialisée avec la valeur maximale pour obtenir les prochaines valeurs. Bien sûr dans ce cas il pourrait y avoir des trous dans les valeurs du champ. Et si les caractères de début peuvent varier : FIC, FOC, PUC et POC alors il faudra autant des séquences que des valeurs possibles. Dans ce cas il sera mieux d'utiliser une table des compteurs qui garde la valeur récente de la clé (FIC, FOC, PUC et POC)

Discussions similaires

  1. [10g] Increment valeur varchar
    Par raniyakn dans le forum PL/SQL
    Réponses: 6
    Dernier message: 24/06/2015, 14h28
  2. Auto incremente sr un champ Varchar
    Par mr.net dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/09/2007, 13h40
  3. Auto increment couplé à un varchar ?
    Par Raay dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/05/2007, 09h31
  4. Incrementer un VARCHAR qui contient des chiffres
    Par nassoft dans le forum SQL
    Réponses: 3
    Dernier message: 13/03/2007, 22h07
  5. créer une clé varchar auto-increment
    Par guns17 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/02/2006, 19h30

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