[SQL Oracle]

Fermé
ornellad Messages postés 2 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 25 mai 2010 - 24 mai 2010 à 10:03
 fiu - 26 mai 2010 à 03:30
Bonjour, je suis actuellement en train d'écrire des requêtes SQL. J'ai une table possédant une trentaine de colonnes concernant des spécialités médicales. Quand une spécialité est celle du dossier étudié, la valeur de la colonne est -1 sinon c'est 0. J'ai créé dans une autre table un attribut lbspemed, pour récupérer une chaîne de caractères avec l'intitulé de la spécialité médicale du dossier. Pour cela je pensais utiliser la fonction CASE de cette façon :

SELECT CASE WHEN activite_specialiteapp.addictologie=-1 THEN v_appli_spemed.lbspemed='Addictologie'
WHEN activite_specialiteapp.aidemedicale=-1 THEN v_appli_spemed.lbspemed='Aide Médicale'
END
FROM activite_specialiteapp, v_appli_spemed
WHERE activite_specialiteapp.iddoss=v_appli_spemed.iddoss;

Malheureusement SQL Developer me dit qu'il y a une erreur concernant un mot clé qui manquerait et j'avoue que là je sèche. Avez vous une idée de fonction ou de procédure que je pourrais utiliser sinon ? L'idée est donc de tester toutes les colonnes jusqu'à récupérer l'intitulé de celle qui vaut -1 !

Merci d'avance




A voir également:

3 réponses

ornellad Messages postés 2 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 25 mai 2010
25 mai 2010 à 11:50
Aucun spécialiste de la fonction CASE ou du remplissage automatique de champs :( ????
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 25/05/2010 à 21:35
Salut,
CASE...WHEN ne fait pas d'affectation....mais est une sorte de mise en forme de la valeur retournée (pour que celle-ci soit peux etre plus comprehensible...)
CASE..... WHEN activite_specialiteapp.addictologie=-1 THEN v_appli_spemed.lbspemed='Addictologie' ne doit donc pas fonctionner....
CASE .....WHEN activite_specialiteapp.addictologie=-1 THEN 'Addictologie'
@+
0
Salut

normalement, le case sert à renvoyer une valeur, pas à faire des affectations comme tu l'essaies
donc ton case devrait plutôt ressembler à
CASE
WHEN activite_specialiteapp.addictologie=-1
THEN 'Addictologie'
WHEN activite_specialiteapp.aidemedicale=-1
THEN 'Aide Médicale'
END specialite -- pour aliaser "specialite" l'expression CASE


...mais comme tu te rends compte que c'est pénible à manipuler, je te laisse assimiler tranquillement l'idée que tes spécialités ne devraient pas occuper x colonnes de ta table Activités. Elles devraient plutôt peupler une table SpécialitésMédicales qui pourrait être (cdSpeMed char(3), lbSpeMed varchar(30)).
Ainsi, le jour ou une 33ème spécialité apparaît (ie exopsychiatrie), tu n'auras pas à toucher à la structure d'Activités, à ton case ni à tous les autres bidules qui s'appuient dessus, il te suffirait de rajouter une ligne dans SpécialitésMédicales
0
J'ai oublié : il est préférable de rajouter une clause ELSE à la fin du CASE (juste avant le END) pour renvoyer une valeur par défaut.
Et n'ayant pas d'Oracle sous la main, je ne sais pas comment le CASE se comporte quand aucune condition n'a été satisfaite et qu'il n'y a pas de clause ELSE.
0