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 :

Nom de colonne "SYS_NC000" dans un index


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut Nom de colonne "SYS_NC000" dans un index
    Bonjour,

    Je cherche le moyen de trouver le nom réel d'un champ d'index déclaré DESC et dont le nom est affiché sous la forme "SYS_NC000..."

    Exemple :
    Index créé avec les champs COL_INT (ASC) et COL_CHAR (DESC)

    Requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select column_name
    FROM user_ind_columns
    WHERE table_name = 'maTable'
    AND index_name = 'monIndex'
    Résultat :
    COL_INT
    SYS_NC00007$

    Quelle table pourrait me donner la correspondance SYS_NC00007$ == COL_CHAR ?

    Merci d'avance.

    Julien

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    J'ai trouvé une correspondance dans user_tab_cols, au niveau du champ data_default... Mais quand j'essaie de m'en servir dans une requête d'union, je chope un "SQL Error: ORA-00997: utilisation interdite du type de données LONG" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT INDEX_NAME, COLUMN_NAME
    FROM user_ind_columns 
    where INDEX_NAME = 'monIndex'
    AND COLUMN_NAME NOT LIKE 'SYS_NC%'
    UNION
    SELECT INDEX_NAME, u2.data_default
    FROM user_ind_columns U1, user_tab_cols U2
    where INDEX_NAME = 'monIndex'
    AND U1.table_name = U2.table_name
    AND U1.COLUMN_NAME LIKE 'SYS_NC%'
    AND U1.COLUMN_NAME = U2.COLUMN_NAME
    Damned !

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Ca doit être un index qui utilise une fonction, genere Upper(colonne).
    Que est-ce que tu cherche exactement ?

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Salut,

    Citation Envoyé par mnitu Voir le message
    Ca doit être un index qui utilise une fonction, genere Upper(colonne).
    Non non, c'est bel & bien un index créé tout bêtement, avec pour seule particularité le fait que le 2nd champ soit demandé "DESC".


    Citation Envoyé par mnitu Voir le message
    Que est-ce que tu cherche exactement ?
    Je cherche à retourner la liste des champs d'un index donné. J'ai donc attaqué la table user_ind_columns :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COLUMN_NAME, DESCEND
    FROM user_ind_columns 
    WHERE index_name = 'monIndex'
    Ce qui me retourne "COL_INT ASC" et "SYS_NC00007$ DESC", au lieu de "COL_INT ASC" et "COL_CHAR DESC"...

  5. #5
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Je vais essayer d'utiliser ce qui est décrit ici
    http://www.edhanced.com/ask-mred/?q=node/view/159


  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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
     
    create index ix2_emp on emp (empno asc, ename desc)
    /
    SQL> column column_name format a30
    SQL> column column_expression format a30
    SQL> r
      1  Select column_name, column_expression
      2    From user_ind_columns i
      3         Left Outer Join
      4         user_ind_expressions e
      5         On (e.index_name = i.index_name
      6             And e.table_name = i.table_name
      7             And e.column_position = i.column_position)
      8   Where i.table_name = 'EMP'
      9*    And i.index_name = 'IX2_EMP'
     
    COLUMN_NAME                    COLUMN_EXPRESSION
    ------------------------------ ------------------------------
    SYS_NC00009$                   "ENAME"
    EMPNO
    Edit
    Indexes with descending columns are really function-based indexes
    C'est ce que je pensais.
    /Edit

  7. #7
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249

  8. #8
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par mnitu Voir le message
    [code]
    C'est ce que je pensais.
    Yep..... Function-based index, mais sans aucune fonction déclarée explicitement.
    Et puis merci le champ LongRaw qu'il faut bidouiller pour pouvoir manipuler comme on l'entend !

    Oracle, ô désespoir !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/05/2005, 14h18
  2. Noms de colonne dans une colonne
    Par Digirom dans le forum Langage SQL
    Réponses: 14
    Dernier message: 23/04/2004, 11h51

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