Bonjour,
est-il possible d'effectuer un select dans une table dont la structure m'est inconnue ??
Exemple : select col(5) from ma_table
--> cela me renverait le contenu de la colonne 5 de ma_table.
Merci par avance de vos réponses,
Jérôme.
Bonjour,
est-il possible d'effectuer un select dans une table dont la structure m'est inconnue ??
Exemple : select col(5) from ma_table
--> cela me renverait le contenu de la colonne 5 de ma_table.
Merci par avance de vos réponses,
Jérôme.
J'utiliserais la table système user_tab_cols pour récupérer le nom de la colonne, je construis ma requête dynamiquement et je lance avec un execute immediate ( http://sheikyerbouti.developpez.com/execute_immediate/ )
une approche xml serait pour avoir la 3e colonne de la table EMP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select column_name, extractvalue(column_value,'/ROW/'||column_name) from table(xmlsequence(cursor(select * from emp))), user_tab_columns where COLUMN_ID=3 and table_name='EMP' ;
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
17NAME VALUE ---- ---------- JOB CLERK JOB SALESMAN JOB SALESMAN JOB MANAGER JOB SALESMAN JOB MANAGER JOB MANAGER JOB ANALYST JOB PRESIDENT JOB SALESMAN JOB CLERK JOB CLERK JOB ANALYST JOB CLERK
C'est incontestablement plus propre que ma solution !![]()
mais c'est génial même
![]()
un petit tuto sur XMLDB serait vraiment génial![]()
Bonjour,
Merci beaucoup pour la réponse.
Je voudrais corser un peu l'ordre SQL que tu as poster sur le forum.
Est-il possible d'effectuer un ordre SQL comme celui-ci :
mais ne récupérer que la valeur de la nième ligne de la 3ème colonne par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select column_name, extractvalue(column_value,'/ROW/'||column_name) from table(xmlsequence(cursor(select * from emp))), user_tab_columns where COLUMN_ID=3 and table_name='emp';
Merci par avance,
Jérôme MACREZ.
peut-être avec rownum ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select column_name, extractvalue(column_value,'/ROW/'||column_name) from table(xmlsequence(cursor(select emp.*, rownum from emp))), user_tab_columns where COLUMN_ID=2 and table_name='EMP' and extractvalue(column_value,'/ROW/ROWNUM')=11;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4NAME VALUE ----- ----- ENAME ADAMS
Ca a l'air propre, mais niveau perf, je sais pas.
En 9i : Sous toad, avec une table de 1500 lignes, au bout de 1 minute, j'arrête le Sql (par le bouton CANCEL) et là je suis déconnecté de la base.
ORA-03113 :End-of-File on communication channel.
Visiblement la jointure pour le extract lui bouffe pas mal de ressources.
peut-être qu'il est mieux d'avoir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select column_name, extractvalue(column_value,'/ROW/'||column_name) from table(xmlsequence(cursor(select * from (select emp.*,rownum r from emp) where r=3))), user_tab_columns where COLUMN_ID=2 and table_name='EMP';
bon, de tout façon je trouve ça folklorique, il serait tellement plus simple de savoir quelle colonne on veut...
s'il s'agit d'une table avec des colonnes du style X1,X2,X3, on peut aussi faire decode(:n,1,col1,2,col2,3,col3)
et la 3e ligne d'une table, ça ne veut rien dire, car les lignes ne sont pas ordonnées (à moins qu'on employe order by)...
c'est assez bizarre de vouloir "la 3e colonne" plutôt que de vouloir "le job" ou "la date"
Désolé, j'ai pas donné le code :
C'est pas le rownum qui bloque, c'est ton premier code:
Il n'y a que chez moi que ça foire sur une table de 1500 lignes ?
PS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select column_name, extractvalue(column_value,'/ROW/'||column_name) from table(xmlsequence(cursor(select * from emp))), user_tab_columns where COLUMN_ID=3 and table_name='EMP';
marche impec.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select extractvalue(column_value,'/ROW/NAME') from table(xmlsequence(cursor(select * from emp)))
Partager