[Oracle] Résultat decode en nom de colonne

Résolu/Fermé
Arch - 5 juin 2012 à 10:52
 Arch - 7 juin 2012 à 14:41
Bonjour,
mon problème est que j'aimerais récupérer un nom de colonne dans un select grâce à la fonction decode pour pouvoir ensuite remplir le champ vide dans cette colone ; je recherche le champ vide dans la fonction decode qui me retourne ce champ s'il est vide.

select decode(pa_x_wgs84, null, 'PA_X_WGS84', decode(pa_x_l93, null, 'PA_X_L93', decode(pa_x_l2E, null, 'PA_X_L2E')))

Le problème est qu'il me sort bien le bon nom de colonne, sauf qu'il sort en résultat et non en nom de colonne.
Est-ce possible?
Merci de votre aide!
A voir également:

8 réponses

DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
5 juin 2012 à 13:15
Bonjour Arch,

PA_X_L2E ne peut pas devenir un libellé de colonne avec ce DECODE imbriqué au nombre de 3.

Comment s'appellerais ta colonne si tes 2 ou 3 champs sont NULL ?

ce decode unique fonctionnerai :

select decode(pa_x_wgs84, null, 'PA_X_WGS84') AS PA_X_WGS84

Pourquoi tu veux formater le nom de la colonne ? (techniquement parlant)

DROE
1
ah, enfin trouvé!

en fait il faut faire du SQL dynamique :

IF cord_x IS NOT NULL AND cord_y IS NOT NULL THEN

req := 'UPDATE ma_table SET ' || cord_x || ' = (SELECT coord_x FROM table2), ' || cord_y || ' = (SELECT coord_y FROM table2) WHERE ' || cord_x || ' is null AND ' || cord_y || ' is null';

EXECUTE IMMEDIATE (req);

END IF;

champagne!
1
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
7 juin 2012 à 11:28
oui parfais.
attention, je ne vois aucune condition concernant ta PK dans les clauses where
je ne t'aide plus comme tu as pu le remarquer, tu as tous pour réussir ta proc :)
courage
0
effectivement bien vu, mais je n'ai pas oublié les conditions j'ai juste simplifié la procédure pour montrer le raisonnement! ;)
0
le résultat :
http://img15.hostingpics.net/pics/455809result.jpg 

et je voudrais que PA_X_L2E devienne le nom de colonne!
0
alors techniquement j'ai 4 colonnes (pour simplifier : un code (PK) et les 3 colonnes ci-dessus), dans les 3 il n'y en a qu'une qui est vide, et j'aimerais récupérer le code de cette ligne avec le nom de cette colonne dans le select pour ensuite effectuer un traitement dessus.
alors je ne vois pas trop ce que ton code fait, devrait-il retourner la même chose que :
select PA_X_WGS84 
from ma_table where pa_x_wgs84 is null;

mais ça ne donne pas pareil !

Pour te répondre, PA_X_L2E est mon nom de colonne, et je ne veux pas formater le nom de colonne, je veux garder celui qui contient le champ vide.
J'espère que c'est possible! Merci de ton aide
0
DROE je te sentais inspiré, reviens! ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
6 juin 2012 à 10:36
héhé

je suis là et inspiré mais je ne comprends pas ton raisonnement de vouloir absolument le nom de la colonne en libellé d'entête dans le résultat pour un traitement futur.

quel traitement final tu veux faire ensuite avec ce résultat ?
tu es dans une procédure PL / SQL (oracle) ? utilisation d'un cursor ?

En tous cas, je ne vois pas de solution direct en sql pur pour ton problème ou alors j'ai rien compris à ton problème :))

DROE

0
alors alors.
donc j'ai 6 colonnes (3x2 coordonnées), 2 de ces paires sont déjà définies dans la base pour la ligne recherchée et j'ai 2 coordonnées x et y extérieures, qu'il faut que je place dans la dernière paire, celle qui est vide.
Petite image à l'appui ce sera mieux.
http://img15.hostingpics.net/pics/777191result2.jpg

j'ai plusieurs tables comme ça, et pour chaque table les champs non renseignés seront dans des colonnes différentes, et je voudrais pouvoir insérer ces 2 coordonnées dans n'importe quelle table avec quelque chose de générique, juste en détectant quels champs sont vides, et récupérer les colonnes dans le select.
ça parait cohérent? y'a-t-il plus simple?
merci pour ton retour!
0
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
6 juin 2012 à 11:37
En SQL tu n'y arriveras pas.

tu sais écrire une procédure PL/SQL ou pas ?

Avec un procédure tu peux exécuter ton traitement sur toutes les tables et colonnes en une seule passe

tes 2 coordonnées x et y extérieures à insérer sont différentes pour chaque lignes je suppose, elles sont stockées dans une autre table ?
0
Oui elles sont dans une autre table et différentes. ah oui j'ai déjà fait des procédures, en passant par des variables par exemple? c'est ce que je pensais faire au final, faire un test pour récupérer les valeurs des colonnes dans des variables puis les utiliser dans un select?
es esto posible?
0
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
6 juin 2012 à 12:30
Oui, écrire une procédure.
Pour chaque tables,tu récupères via des curseurs les lignes à tester,
tu identifies les noms de champs puis tu update en boucle grâce à ta PK.
C'est un joli code à écrire...
0
hou hou ça a l'air intéressant, je vais essayer comme ça!
je te remercie
0
tu saurais comment on gère les variables du coup?
donc je la déclare :
cord_x NVARCHAR(12);

ensuite je veux lui affecter une valeur
cord_x := 'valeur'

Mais il ne reconnait pas 'NVARCHAR' et l'affectation est incorrecte. Il faut passer par un set?
0
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
6 juin 2012 à 19:05
cord_x  VARCHAR2(12);

:)
0
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
7 juin 2012 à 12:19
Arch, si tu veux des exemples concrets sur le PLSQL pour t'aider à faire ta proc complètement tu peux voir ce lien : je fais de la pub, c'est mon blog :)

http://www.dba-ora.fr/pages/PLSQL-Tutorial-5494697.html

DROE
0
tu peux rajouter le sql dynamique maintenant que je t'ai appris ce que c'est ... ;)
0