IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

SELECT de toutes les colonnes sauf une [12c]


Sujet :

SQL Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut SELECT de toutes les colonnes sauf une
    Salut,

    Je ne sais plus si j'avais posé la question donc, dans le doute, rebelote, au cas où une 18 ou 19c incorporerait cette feature

    Est-il possible sous Oracle, en SQL, de faire un SELECT * en excluant une ou des colonnes?
    Par exemple j'ai une table de 50 colonnes et je ne veux pas sélectionner les deux colonnes col32 et col 33 (trop grosses par exemple) : en outre je ne veux pas taper le nom des 48 colonnes (trop fatiguant pour un informaticien ).

    Le code ressemblerait à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * - col32 - col 33 FROM table_test;
    Je pourrais faire une boucle en pl/sql sur DBA_TAB_COLS mais là on sort l'artillerie lourde...


    Bonne journée
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Pas à ma connaissance (qui reste limitée)
    De tout façon les étoiles, c'est le mal

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Bonjour,

    Si tu as envie de t'amuser... Y'a toujours la solution du script bourrin tant apprécié.

    Tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT listagg columns_name INTO ListColonne FROM all_tab_cols WHERE table_name = '' and colunm_name not in ('', '')
    Puis un petit SQL dynamique qui fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ListColonne FROM matable
    et let's go

    (Dans le listagg, tu mets bien le séparateur en temps que virgule)

    Tu peux même en faire une procédure ou une fonction histoire d'avoir le nom de table que tu veux select et le nom des colonnes que tu veux pas voir en paramètre

    A voir après si ca vaut le coup de s'amuser à faire ça...

    Sinon à ma connaissance, pas possible, désolé

    Bisous

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Si l'outil utilisé est sql*plus, on peut masquer les colonnes souhaitées avec NOPRINT.
    Ici, on empêche l'affichage de la colonne SAL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    COL SAL NOPRINT
    SELECT * FROM SCOTT.EMP;
    COL SAL CLEAR
    SELECT * FROM SCOTT.EMP;
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Et dans les nouveautés amusantes, en 18c on a les fonctions de table polymorphes qui peuvent être exploitées pour votre usage.

    Par exemple, dans la section REMOVE COLUMNS de cette page (faire CTRL F) :
    https://oracle-base.com/articles/18c...-functions-18c
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Et dans SQL Developer (et sans doute de nombreux autres outils), quand on fait glisser une table depuis l'explorateur d'objets vers la zone de saisie des requêtes, le glissement peut générer un SELECT avec la liste de toutes les colonnes. Il suffit alors de retirer celles dont on ne veut pas.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  7. #7
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Merci à tous pour vos réponses

    Je pense qu'effectivement j'avais déjà posé cette question ici car j'ai retrouvé dans mes archives la solution NOPRINT.
    En voici une autre qu'on m'avait dit, plus brutale selon la taille de la table mais bon, c'est une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE TTEMP AS SELECT * FROM TAB1 ;
    ALTER TABLE TTEMP DROP COLUMN COL_DEL;
    SELECT * FROM TTEMP;
    DROP TABLE TTEMP;
    Pomalaix, je vais voir ce que sont ces fonctions de tables polymorphes : j'espère que j'aurais moins mal à la tête qu'avec la clause MODEL
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  8. #8
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    Si je comprends le besoin c'est d'écrire rapidement un select d'une table de 50 colonnes ou plus.
    ...
    Une table de 50 colonnes

    Le problème semble plus provenir de la conception que de l'outil.
    Le savoir est une nourriture qui exige des efforts.

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    50 colonnes.. ça va c'est pas beaucoup
    La conception ou le métier peut parfois nécessiter des grosses tables, ou aussi des colonnes "inutiles" car Oracle ne permet de faire des contraintes référentielles que sur des colonnes (pas de données fixes)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il y a également beaucoup d'algorithmes en datascience qui nécessitent d'avoir des données pivotées (et avec du volume il vaut mieux les pivoter dans la base que sur son poste en R), générant de facto beaucoup de colonnes, et parfois on a besoin d'en retirer des colonnes purement techniques.

    /digression hors Oracle

    Comme c'est un besoin réel qu'on croise de plus en plus, Teradata a développé une fonction "newSQL" AntiSelect
    https://docs.teradata.com/reader/CWV...YMayfnD1FcrIMQ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select t.*
      from Antiselect(ON table_test USING Exclude ('col32')) as t;
    /fin de digression

  11. #11
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Cool le ANTISELECT
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sélectionner toutes les colonnes sauf une.
    Par pedro99 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 23/05/2009, 17h21
  2. Afficher toutes les colonnes d'une Datatable
    Par enjoy dans le forum JSF
    Réponses: 7
    Dernier message: 01/02/2007, 14h57
  3. Réponses: 6
    Dernier message: 01/08/2006, 18h12
  4. Imprimer toutes les colonnes sur une même feuille
    Par Soulghard dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 12h10
  5. Toutes les colonnes d'une BDD
    Par mohamed dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo