[Oracle] Résultat decode en nom de colonne

Résolu
Arch -  
 Arch -
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!

8 réponses

  1. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    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
  2. Arch
     
    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
    1. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
       
      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
    2. Arch
       
      effectivement bien vu, mais je n'ai pas oublié les conditions j'ai juste simplifié la procédure pour montrer le raisonnement! ;)
      0
  3. Arch
     
    le résultat :
    http://img15.hostingpics.net/pics/455809result.jpg 

    et je voudrais que PA_X_L2E devienne le nom de colonne!
    0
  4. Arch
     
    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
    1. Arch
       
      DROE je te sentais inspiré, reviens! ^^
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    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
  7. Arch
     
    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
  8. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    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
    1. Arch
       
      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
    2. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
       
      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
    3. Arch
       
      hou hou ça a l'air intéressant, je vais essayer comme ça!
      je te remercie
      0
    4. Arch
       
      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
    5. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
       
      cord_x  VARCHAR2(12);

      :)
      0
  9. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    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
    1. Arch
       
      tu peux rajouter le sql dynamique maintenant que je t'ai appris ce que c'est ... ;)
      0