Sélectionnez * dans la table et continue à exécuter certaines fonctions sur une seule colonne nommée

StackOverflow https://stackoverflow.com/questions/639341

Question

J'aimerais pouvoir renvoyer toutes les colonnes d'une table ou de la table résultante d'une jointure tout en conservant la possibilité de transformer une date en chaîne par son nom.

Par exemple

Sélectionnez ID, DESCRIPTION, TO_CHAR (CHANGE_DATE, 'AAAA-MM-JJ HH24: MI: SS') AS FORMATED_DATE FROM MY_TABLE;

.

Tout cela est bien beau pour ces trois colonnes seulement. Mais la table aura en réalité beaucoup plus de colonnes et pourra être jointe à d’autres tables. J'aimerais pouvoir utiliser un caractère générique pour obtenir toutes les colonnes et pouvoir néanmoins effectuer la transformation TO_CHAR.

Quelque chose comme: SELECT *, (CHANGE_DATE, 'AAAA-MM-JJ HH24: MI: SS') AS FORMATED_DATE FROM MY_TABLE;

Comme vous l’auriez deviné de TO_CHAR, j’utilise Oracle, donc j’utilise PLSQL.

Ma question est donc la suivante: existe-t-il une syntaxe qui me permettrait de sélectionner toutes les colonnes (via *) tout en pouvant appeler une fonction sur une seule colonne au sein de ces colonnes?

Était-ce utile?

La solution

Le mieux que vous puissiez faire est quelque chose comme:

SELECT 
     MY_TABLE.*, 
     (CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS') AS FORMATED_DATE 
FROM MY_TABLE;

Autres conseils

Plutôt que de vous donner des leçons, ici. Oracle est un peu plus compliqué que MSSQL à ce sujet, mais cela a fonctionné pour moi.

SELECT  GENERAL.GOREMAL. * , rownum ,date actuelle de GENERAL.GOREMAL

Ce qui suit est acceptable:

SELECT T1.*, T2.*, x + y as some_Z

ou peut-être

SELECT compute_foo() as aColumn, *

Le dernier élément conservera toujours vos colonnes spéciales au même endroit, au début, quel que soit le nombre de colonnes générées par le caractère générique.

Dans SQL Server, ce que vous avez écrit est parfaitement valide. Je suppose que cela devrait également fonctionner dans Oracle. Sachez simplement que vous retournerez la colonne de date deux fois une fois dans sa forme originale et une fois dans sa forme.

Pour votre information, utiliser SELECT * devrait probablement être évité, mais c’est une autre question: -)

Pour info, si vous avez des jointures, sélectionnez * est particulièrement à éviter, car cela gaspille les ressources du serveur et du réseau, d'autant plus que tous les champs de jointure contiennent les mêmes informations. Codage indésirable tel que & select; select * " crée des problèmes de performances qui deviennent très difficiles à résoudre lorsque toutes les requêtes du système sont mal écrites. Je sais que dans SQL Server, vous pouvez faire glisser les colonnes depuis le navigateur d’objets, cela ne serait pas surprenant si ORacle avait quelque chose de similaire.

De plus, select * peut créer de nombreux bogues ultérieurs à mesure que les tables de données changent. Il est peu pratique de ne pas nommer vos colonnes dans l’ordre spécifique dans lequel vous les voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top