Oracle dynamique nom de la colonne dans l'instruction select
Question:
Est-il possible d'avoir un nom de colonne dans une instruction select changé basée sur une valeur en elle que le résultat de l'ensemble?
Par exemple, si un year
valeur dans un ensemble de résultats est inférieure à 1950
, le nom de la colonne OldYear
, sinon le nom de la colonne NewYear
. Le year
valeur du résultat est garanti d'être le même pour tous les enregistrements.
Je pense que c'est impossible, mais ici, c'était ma tentative a échoué au test de l'idée:
select 1 as
(case
when 2 = 1 then "name1";
when 1 = 1 then "name2")
from dual;
Pourquoi avez-vous besoin? Ou vous êtes simplement curieux?
J'ai eu une situation où cela aurait pu être applicable et nous avons trouvé une bien meilleure solution à notre problème. J'ai fait ce post par curiosité.
J'ai eu une situation où cela aurait pu être applicable et nous avons trouvé une bien meilleure solution à notre problème. J'ai fait ce post par curiosité.
OriginalL'auteur Americus | 2009-05-13
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas varier d'un nom de colonne par ligne d'un jeu de résultat. C'est à la base de bases de données relationnelles. Les noms des colonnes de la table "en-tête" et un nom s'applique à la colonne pour toutes les lignes.
Re commentaire: OK, peut-être que l'OP Americus signifie que le résultat est connu pour être exactement une ligne. Mais peu importe, SQL n'a pas de syntaxe pour soutenir une dynamique alias de colonne. Les alias de colonne doit être constante dans une requête.
Même dynamique SQL ne vous aide pas, parce que vous en auriez pour exécuter la requête à deux reprises. Une fois pour obtenir la valeur, et une deuxième fois pour ré-exécuter la requête avec un autre alias de colonne.
C'est à peu près ce que j'attendais. Merci!
OriginalL'auteur Bill Karwin
La "bonne" façon de faire cela en SQL est d'avoir les deux colonnes, et d'avoir la colonne qui est inapproprié être
NULL
, tels que:OriginalL'auteur Thought
Il n'y a pas de bonne raison de changer le nom de la colonne de manière dynamique - c'est l'analogue du nom d'une variable dans le code de procédure - c'est juste une indication que vous pourriez vous y référer ultérieurement dans votre code, vous n'avez pas envie de le changer lors de l'exécution.
Je devine ce que vous êtes vraiment après est une façon pour le format de sortie (par exemple, pour l'impression d'un rapport) de façon différente en fonction des données. Dans ce cas, je voudrais générer l'en-tête de texte dans une colonne distincte dans la requête, par exemple:
Puis l'appel de la procédure entre les valeurs renvoyées pour mydata et myheader et le format de sortie comme requis.
OriginalL'auteur Jeffrey Kemp
Vous aurez besoin de quelque chose de similaire à ceci:
OriginalL'auteur Irfan Mulic
Cette solution nécessite que vous lancez SQLPLUS et un .fichier sql à partir d'un .fichier de chauve-souris ou en utilisant une autre méthode avec l'Oracle approprié des informations d'identification. L' .fichier bat peut être démarré manuellement, à partir d'un serveur de tâche planifiée, Control-M de travail, etc...
De sortie est un .fichier csv. Cela implique aussi que vous devez remplacer toutes les virgules dans la sortie avec un autre caractère ou de risque de colonne/incompatibilité de données en sortie.
Le truc, c'est que vos en-têtes de colonne et les données sont sélectionnées dans deux différentes instructions SELECT.
Il n'est pas parfait, mais il fonctionne, et il est le plus proche de la norme Oracle SQL que j'ai trouvé pour une dynamique de l'en-tête de colonne à l'extérieur d'un environnement de développement. Nous utilisons cette profondeur de générer des quotidiens/hebdomadaires/mensuels rapports pour les utilisateurs sans avoir recours à une interface graphique. Sortie est enregistrée sur un lecteur réseau partagé répertoire/Sharepoint.
OriginalL'auteur JKimmel