Bonjour,

voici mon problème


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
create table aa_toto (c1 number primary key, c2 varchar2(30));
 
insert into aa_toto values (1,'aaaaaaa');
 
commit;
Je n'ai pas de séquences et je voudrai insérer une ligne dans ma table en incrémentant la valeur de c1.
je fais ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
insert into aa_toto
SELECT NVL(MAX(c1),0)+1, 'bbbbbbb' from aa_toto
Par contre je souhaiterais pouvoir insérer seulement si le champ c2 que je veux insérer n'existe pas déjà:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
insert into aa_toto
SELECT NVL(MAX(c1),0)+1, 'aaaaaaa' from aa_toto
WHERE NOT EXISTS(SELECT 1 FROM aa_toto where c2 = 'aaaaaaa')
Et là mon insertion plante car il essai quand même d'insérer.
En effet la requête suivante me retourne 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SELECT NVL(MAX(c1),0)+1 from aa_toto
WHERE NOT EXISTS(SELECT 1 FROM aa_toto where c2 = 'aaaaaaa')
Moi je voudrais que si le champ c2 qu'on veut insérer existe déjà il ne m'insère rien du tout.
Je veux une solution purement SQL.
Pas la peine de me dire de créer une séquence.

merci de votre aide