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 :

requète retournant le nombre de colonnes


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par défaut requète retournant le nombre de colonnes
    slt,
    je cherche a déterminer le nombre de colonnes d'une table donnée !
    quelle est la requéte adéquate a ma demande svp ...
    merci de me répondre .

  2. #2
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from user_tab_columns where table_name='YOUR_TABLE_NAME';
    Nicolas.

  3. #3
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Nicolas, quand j'ai lu ta réponse, j'ai été "surpris", parce que j'ai l'habitude de requêter sur USER_TAB_COLS.

    Donc, je me suis demandé quelle est la différence... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     select dbms_metadata.get_ddl('VIEW', 'USER_TAB_COLUMNS', 'SYS') FROM DUAL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
      CREATE OR REPLACE FORCE VIEW "SYS"."USER_TAB_COLUMNS" ("TABLE_NAME", "COLUMN_N
    AME", "DATA_TYPE", "DATA_TYPE_MOD", "DATA_TYPE_OWNER", "DATA_LENGTH", "DATA_PREC
    ISION", "DATA_SCALE", "NULLABLE", "COLUMN_ID", "DEFAULT_LENGTH", "DATA_DEFAULT",
     "NUM_DISTINCT", "LOW_VALUE", "HIGH_VALUE", "DENSITY", "NUM_NULLS", "NUM_BUCKETS
    ", "LAST_ANALYZED", "SAMPLE_SIZE", "CHARACTER_SET_NAME", "CHAR_COL_DECL_LENGTH",
     "GLOBAL_STATS", "USER_STATS", "AVG_COL_LEN", "CHAR_LENGTH", "CHAR_USED", "V80_F
    MT_IMAGE", "DATA_UPGRADED") AS
      select TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_TYPE_MOD, DATA_TYPE_OWNER,
           DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, COLUMN_ID,
           DEFAULT_LENGTH, DATA_DEFAULT, NUM_DISTINCT, LOW_VALUE, HIGH_VALUE,
           DENSITY, NUM_NULLS, NUM_BUCKETS, LAST_ANALYZED, SAMPLE_SIZE,
           CHARACTER_SET_NAME, CHAR_COL_DECL_LENGTH,
           GLOBAL_STATS, USER_STATS, AVG_COL_LEN, CHAR_LENGTH, CHAR_USED,
           V80_FMT_IMAGE, DATA_UPGRADED
      from USER_TAB_COLS
     where HIDDEN_COLUMN = 'NO'
    Donc au passage, j'en profite : qu'est ce qu'une HIDDEN_COLUMN ?

  4. #4
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Honnetement, je ne m'etais jamais pose la question, et c'est par habitude que je travaille sur USER_TAB_COLUMNS.
    Enfin, voila ce que j'ai trouve dans la docs sur les hidden columns :
    "when you create a table that contains user-defined type data, the database maps columns of user-defined type to relational columns for storing the user-defined type data. This causes additional relational columns to be created. This results in "hidden" relational columns that are not visible in a DESCRIBE table statement and are not returned by a SELECT * statement. "

    Nicolas.

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Hmmm, zut, user_tab_columns semble donc mieux. C'est dommage, parce que c'est plus long à taper

    J'ai cherché les hidden_columns sur ma base, et j'en ai retrouvées (sur un jeu de test que j'avais fait pour un autre post )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create table testnull as 
    select case level when 1 then null else level end as nb, 
    'a' as f
    from dual 
    connect by level < 100;
     
    create index iitestnull on testnull(nb, 1) 
    ;
    create index iitestnull2 on testnull(nb, 5) 
    ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select table_name, column_name 
      2  from user_tab_cols 
      3  where hidden_column <> 'NO'
      4    and table_name = 'TESTNULL'
      5  /
    TESTNULL                       SYS_NC00003$
    TESTNULL                       SYS_NC00004$
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> select sys_nc00003$, sys_nc00004$, t.fic, t.nb
      2  from testnull t
      3  where rownum < 5
      4  /
               1            5 a
               1            5 a 2
               1            5 a 3
               1            5 a 4
    Ce qui est amusant, c'est que si je fais juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> select sys_nc00003$, sys_nc00004$, t.nb
      2  from testnull t
      3  where rownum < 5
    Ca ne renvoie rien...

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    amusant? je n'ai pas le même résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    SQL> drop table testnull
    Table dropped.
    SQL> CREATE TABLE testnull AS 
    SELECT case level when 1 then NULL else level end AS nb, 
    'a' AS f
    FROM dual 
    connect BY level < 100
    Table created.
    SQL> CREATE INDEX iitestnull ON testnull(nb, 1)
    Index created.
    SQL> CREATE INDEX iitestnull2 ON testnull(nb, 5)
    Index created.
    SQL> select sys_nc00003$, sys_nc00004$, t.fic, t.nb
    from testnull t
    where rownum < 5
    select sys_nc00003$, sys_nc00004$, t.fic, t.nb
    from testnull t
    where rownum < 5
                                       *
    Error at line 1
    ORA-00904: "T"."FIC": invalid identifier
     
    SQL> SELECT sys_nc00003$, sys_nc00004$, t.nb
    FROM testnull t
    WHERE rownum < 5
     
    SYS_NC00003$ SYS_NC00004$         NB
    ------------ ------------ ----------
               1            5           
               1            5          2
               1            5          3
               1            5          4
     
     
    4 rows selected.
    Intéressant, je ne savais pas que l'on pouvait sélectionner les colonnes cachées !

  7. #7
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Euh... je ne sais pas comment je me suis débrouillé avant, mais là ça marche à nouveau ! (je pense que j'ai du être enlevé par les extra terrestres ou un truc du genre...)

Discussions similaires

  1. [OpenOffice][Base de données] Nombre de colonnes dans une requête
    Par clarion14 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 09/12/2009, 07h37
  2. Récupérer le nombre de colonne d'une requête
    Par Buell dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/08/2009, 17h44
  3. [HQL] Nombre de colonnes retourné par une requête
    Par Fr@ncky dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/07/2007, 13h47
  4. requête: nombre maximum colonnes
    Par tomas dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/03/2007, 13h47
  5. [T-SQL] Connaître le nombre de colonnes retourner par une PS
    Par NeoMan dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/12/2005, 11h30

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