Bonjour!

Voilà, mon but est de pouvoir créer un utilisateur et de lui affecter une langue. Il y a donc 2 tables utilisateurs et langues que j'utiliserais(j'ai plutôt un niveau débutant en oracle).
Dans ma procédure, j'utilise une requête qui correspond à ce que je rentre en paramètre, comme ça, s'il trouve une correspondance, je ne ferais qu'un update de la langue de l'utilisateur.
Sinon, j'insère mes données dans les tables souhaitées pour créer une langue si elle n'est pas référencée dans la table ainsi que l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
CREATE OR REPLACE PROCEDURE creer_utilisateur(
	   nameuser VARCHAR2,
	   fname VARCHAR2,
	   mdp VARCHAR2,
	   langue VARCHAR2
	   ) IS
	   iduser utilisateurs.id_utilisateur%TYPE;
	   mdps utilisateurs.mot_de_passe%TYPE;
	   names utilisateurs.nom%TYPE;
	   fnames utilisateurs.prenom%TYPE;
	   idlang langues.id_langue%TYPE;
	   libellang langues.libelle_langue%TYPE;
BEGIN
select id_utilisateur,mot_de_passe,nom,prenom,t2.id_langue,t2.libelle_langue
into iduser,mdps,names,fnames,idlang,libellang
from utilisateurs t1,langues t2
where t1.id_langue=idlang
and nameuser=names 
and fname=fnames 
and mdp=mdps
and langue=libellang;
if langue=libellang then
update utilisateurs set id_langue=idlang
end if;
exception
 when no_data_found then
insert into langues(id_langue,libelle_langue)
values(seq_lang.nextval,langue);
insert into utilisateurs(id_utilisateur,mot_de_passe,nom,prenom,id_langue) 
values(seq_user.nextval,mdp,nameuser,fname,seq_lang.currval);
END;
Je me doute que l'organisation et la conception de ce que je veux faire est un peu bancal.
Peut-être serait-ce mieux de décomposer plutôt en 2 procédures : une qui crée et une autre qui maj ?
Merci d'avance pour une éventuelle piste !