tester la présence c'est relativement simple, après il y a plusieurs techniques :
- bourrin : on tente l'insertion et traite l'erreur duplicate key si elle survient
- Soft un select count(*) from la tabel where lapk='la valeur que tu calcule' (tu peux utiliser un like
- faire propre : une procédure stockée qui va gérer la chose, tu lui passe les infos en paramètre et dedans tu calcule ta clef primaire.
quoi que tu fasse, pour respecter le cahier des charges tu va être obligé de choisir comment tu régle l'incrément après les initiales.
la solution la plus simple, pour moi, est celle que je te propose.
create table incrementinitiale (
initiale varchar(4) not null,
numero int not null default 0,
primary key initiale
);
le fait de mettre les initiale en pk force l'unicité de cette colonne.
Ensuite l’algorithme est simple
- "calcule de la clef" (deux substr pour récupérer les 4 lettres).
- un select sur la table incrementinitiale pur savoir si la chaîne existe déjà.
- si oui on récupère le numéro, on l'incrémente et on peux insérer dans la table final
- on pense à mettre à jour la table incrementinitiale .
- Si non
- on insère la chaine dans incrementinitiale et on ajoute 0 à la chaine.
- insertion dans la table finale.
ET, comme déjà dit, le must : une procédure Stockée et c'est réglé
sinon, sans autre table, tu fait un select avec un like sur la PK avec un order by laPK desc (si c'est mysql ajoute un limit 1 pour juste la dernière ligne).
- avec la dernière valeur un substr pour récupérer le numéro, incrémente le numéro et recréer la chaine
- insertion dans la table
@+
Il en faut peu pour être heureux ......