Bonjour,
Voilà, je dois m’occuper de créer une procédure qui me crée un utilisateur et qui ajoute une langue dans une autre table (pour avoir un listing des langues).
Je dois pouvoir donc tester mes paramètres,avant l’insertion, par rapport à ce qu’il y aurait déjà de contenu dans les tables concernées.
create or replace procedure create_user (
nameuser varchar2,
lname varchar2,
mdp varchar2,
langue varchar2
) IS
begin
for rec in (select mot_de_passe,nom,prenom,t2.id_langue,t2.libelle_langue
from table1 t1,table2 t2
where t1.id_langue=t2.id_langue)
loop
if langue=rec.libelle_langue and nameuser<>rec.nom and lname<>rec.prenom and mdp<>rec.mot_de_passe then
insert into table1(id_utilisateur,mot_de_passe,nom,prenom,id_langue)
values(sequence.nextval,mdp,nameuser,lname,rec.id_langue);
elsif langue<>rec.libelle_langue and nameuser<>rec.nom and lname<>rec.prenom and mdp<>rec.mot_de_passe then
insert into table2(id_langue,libelle_langue)
values(seq_lang.nextval,langue);
insert into table1(id_utilisateur,mot_de_passe,nom,prenom,id_langue)
values(sequence.nextval,mdp,nameuser,lname,seq_lang.currval);
end if;
exit;
end loop;
commit;
end;
Le fait est que pour une langue existante, tout se passe bien en ne mettant à jour que la table voulue.
Mais, dès lors qu’il ajoute une nouvelle langue pour un utilisateur, il insérera 2 fois la même langue pour ce même utilisateur(si je l’éxécute 2 fois bsur).
Apparemment, ma condition “if” n’est pas respectée et je ne vois pas trop le pourquoi du comment. Vu qu’ après avoir passé la première condition “comparer une langue entrée à une langue présente”, ma deuxième condition apparaît “langue entrée différente de langue présente”.
Bon je suppose que la manière dont je m’y prends n’est pas la bonne. Si il y a des suggestions, merci d’avance !