Sélection du contenu des indexs d'une table

Sélection du contenu des indexs d'une table - SQL/NoSQL - Programmation

Marsh Posté le 25-05-2010 à 11:36:29    

Bonjour :o
 
Je cherche à récupérer le contenu de tous les index d'une table sous oracle.
 
Ce qui donne un peu près le code suivant :  

Code :
  1. SELECT *
  2. FROM MaTable
  3. WHERE COLUMN_NAME IN
  4.        (SELECT * FROM DBA_INDEXES WHERE TABLENAME = 'MaTable')


 
Sauf qu'évidemment, ça ne marche pas :D Pour cause : identificateur COLUMN_NAME invalide (ORA-00901)
 
Quelqu'un aurait une idée de comment je pourrais faire ? Merci d'avance  :jap:


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 25-05-2010 à 11:36:29   

Reply

Marsh Posté le 25-05-2010 à 13:26:40    

Salut,
 
Essaie avec "select COLUMN_NAME from DBA_INDEXES..." dans ton IN.
 
++

Reply

Marsh Posté le 25-05-2010 à 13:41:27    

Fred999 a écrit :

Salut,
 
Essaie avec "select COLUMN_NAME from DBA_INDEXES..." dans ton IN.
 
++


 
J'avais déjà essayé, sans succès (que ce soit avec COLUMN_NAME, qui n'existe pas dans la vue DBA_INDEXES, ou avec INDEX_NAME, qui lui y figure) :/


Message édité par Yagmoth le 25-05-2010 à 13:41:37

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 25-05-2010 à 13:49:00    

ya pas une table systeme du style user_tab_columns avec comme champs column_name?

Message cité 1 fois
Message édité par boomy29 le 25-05-2010 à 14:02:19
Reply

Marsh Posté le 25-05-2010 à 13:49:40    

Aaaah je comprends mieux
 
Hum désolé dans ce cas je pourrai pas t'aider, j'ai pas le mdd des tables système d'Oracle sous la main :/

Reply

Marsh Posté le 25-05-2010 à 14:09:04    

boomy29 a écrit :

ya pas une table systeme du style user_tab_columns avec comme champs column_name?


 
Si, sauf que je n'y vois rien indiquant si la colonne est indexée. Je viens de trouver : il y a la table ALL_IND_COLUMN qui contient cette info. Par contre, toujours pas moyen de préciser dans la clause "where" du premier select qu'il faut vérifier le nom de la colonne.
 

Fred999 a écrit :

Aaaah je comprends mieux
 
Hum désolé dans ce cas je pourrai pas t'aider, j'ai pas le mdd des tables système d'Oracle sous la main :/


 
Merci quand même  :jap:


Message édité par Yagmoth le 25-05-2010 à 14:18:29

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 25-05-2010 à 14:41:18    

et pourquoi tu veux passer par ta table pour faire ca? tu as le TABLE_OWNER et TABLE_NAME dans SYS.ALL_IND_COLUMNS c'est la dessus qu'il faut filtrer

Reply

Marsh Posté le 25-05-2010 à 14:48:29    

casimimir a écrit :

et pourquoi tu veux passer par ta table pour faire ca? tu as le TABLE_OWNER et TABLE_NAME dans SYS.ALL_IND_COLUMNS c'est la dessus qu'il faut filtrer


 
Parce ce que je cherche en définitive, c'est le contenu des colonnes indexées. Sauf que j'essaie de parvenir à leur contenu, sans connaître à l'avance le nom desdites colonnes.
 
En gros je veux faire l'équivalent de  
 

Code :
  1. SELECT ID, NOM FROM CLIENT


 
Sans avoir à préciser ID et NOM (on les suppose inconnus).
 
Dans l'idée, ce serait quelque chose comme ça (syntaxiquement incorrect) :

Code :
  1. SELECT
  2. (SELECT COLUMN_NAME FROM ALL_IND_COLUMNS WHERE TABLENAME = "MaTable" ) FROM MaTable


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 25-05-2010 à 14:57:46    

si tu passes par un language au dessus tu peux construire une requête qui la formaterait correctement, ou si tu veux rester ne pur oracle il faudra passer par du pl/sql pour générer la requête, mais je ne sais pas si il y a moyen de renvoyer un ref cursor a partir d'un sql dynamique.
 
faut voir si c'est pour automatiser complètement ou bien si une fontion qui te revoie le sql que tu exécutes a coté te suffit

Reply

Marsh Posté le 25-05-2010 à 15:06:35    

Réponse que je redoutais :D Je peux éventuellement me débrouiller en programmant, mais l'idée était d'essayer de tout faire en une requête.


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed